兼容低版本IE的JScript5.5实现

2019-06-03 19:56:45王旭
<< 6) | (c2 & 0x3F)); break; } case 14: { // 1110 xxxx 10xx xxxx 10xx xxxx if ((c2 = checkutf8()) == null) return null; if ((c3 = checkutf8()) == null) return null; out[j++] = String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)); break; } default: { switch (c & 0xf) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: { // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx if ((c2 = checkutf8()) == null) return null; if ((c3 = checkutf8()) == null) return null; if ((c4 = checkutf8()) == null) return null; s = ((c & 0x07) << 18) | ((c2 & 0x3f) << 12) | ((c3 & 0x3f) << 6) | (c4 & 0x3f) - 0x10000; if (0 <= s && s <= 0xfffff) { out[j++] = String.fromCharCode(((s >>> 10) & 0x03ff) | 0xd800, (s & 0x03ff) | 0xdc00); } else { return throwerror(); } break; } default: { return throwerror(); } } } } } } } return out.join(''); } function decodeURIComponent(str) { function throwerror() { @if (@_jscript_version < 5) return null; @else var e = new Error(-2146823263, "The URI to be decoded is not a valid encoding"); e.name = "URIError"; e.message = e.description; throw(e); @end } function checkcode() { var d1, d2; d1 = str.charAt(i++); d2 = str.charAt(i++); if (isNaN(parseInt(d1, 16)) || isNaN(parseInt(d2, 16))) { return throwerror(); } return parseInt(d1 + d2, 16); } function checkutf8() { var c = str.charCodeAt(i++); if (c == 37) { if ((c = checkcode()) == null) return null; } if ((c >> 6) != 2) { return throwerror(); } } var out, i, j, len; var c, c2, c3, c4, s; out = []; len = str.length; i = j = 0; while(i < len) { c = str.charCodeAt(i++); if (c == 37) { if ((c = checkcode()) == null) return null; } else { out[j++] = String.fromCharCode(c); continue; } switch(c >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: { // 0xxxxxxx out[j++] = String.fromCharCode(c); break; } case 12: case 13: { // 110x xxxx 10xx xxxx if ((c2 = checkutf8()) == null) return null; out[j++] = String.fromCharCode(((c & 0x1F)