Ecma-262废置函数:unescape

在 Ecma-262 3.0中将废置了unescape函数,虽然大多数的浏览器现在还保留了这个函数,但是说不定哪天就不能用了。本着学习 Ecma-262标准和为将来的不时之需还是根据 Ecma-262 2.0标准中的定义实现一个 unescape 的好。

“你为什么不实现 Ecma-262 2015(ES6)里面的函数,为将来的浏览器兼容做准备?! 这个似乎更现实”

“是我太懒了,还没看 ^_^”

“escape呢?”

“这个我还没想到可以在那里用”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
window.unescape = window.unescape || function(string){
    var r1=string.toString();
    var r2=r1.length;
    var R="";
    var k=0;
    while(1){
        if( k >= r2 ) return R; // 标准里写的是 ==  
        var c = r1.charAt(k);
        if( c === "%" ){
            var subInt4 = r1.substr(k+2,4);
            var subInt2 = r1.substr(k+1,2);
            if( k+6 <= r2 && (r1.charAt(k+1) ==="u") && /^[0-9a-fA-F]{4}$/.test(subInt4)){
                c = String.fromCharCode(parseInt(subInt4,16));
                k+=5;
            }else if(k+3 <= r2 && /^[0-9a-fA-F]{2}$/.test(subInt2)){
                c = String.fromCharCode(parseInt(subInt2,16));
                k +=2;
            }
        }
        R += c;
        k++;
    }
}