这个事儿其实挺有意思的 按 ES 来说,fromCharCode 的参数需要进行 ES 规定的 ToUint16 运算操作 可从 ES1 - 8 翻下来,大致上 ToUint16 整个转换流程都没有把负数的布码形式直接识别为无符号形式的明显说明。 仅有一句较为不好理解的 Let int be the mathematical value that is the same sign as number and whose magnitude is floor(abs(number)). 但这句后半段又很好理解,按说就是绝对值后取整,显然这样操作下来应该是仅会是负值取正且小数取整。 按这里来说 -255 应该转为 255 才对。 可现实是,每个浏览器看起来都不是按 ES 规范来实现的。 由于 v8 最近把 JS 对象相关 API 都用 code asm 重写了,非常不好读。 就找来 mozilla 代码看看,它里面居然仅仅是做了 uint16_t 的强制类型转换 …… 由于负数二进制形式是补码形式,强制无符号转换就是把这个补码的二进制值直接存了无符号 int16,成了 65281。 不知道这种非规范实现是不是历史遗留,亦或是规范我没看仔细…… 就酱紫
第 1 页 / 共 1 页
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。