JavaScript + Chrome: String.fromCharCode给出多余的字符

JavaScript + Chrome: String.fromCharCode giving extraneous characters?

本文关键字:多余 字符 fromCharCode Chrome String JavaScript      更新时间:2023-09-26

谁能解释为什么Chrome可能会给我这个奇怪的结果?定义,

var chars = [72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33];

这个可以正常工作:

console.log(String.fromCharCode.apply(null,chars));

你好,世界!

,

console.log(chars.map(String.fromCharCode));

返回

["H"、"e"、"l"、"l"、"o ", ",", " ", " w"、"o"、"r"、"l↵"、"d"、"!"]

我在IE中没有遇到这种行为。"r "是制表符。似乎Chrome会在相同的位置做这个,无论输入数组/字符串是什么。

[].map()的回调接收三个参数:当前数组项的值,它的索引和数组本身。String.fromCharCode是一个可变函数,因此它将所有参数解释为字符代码。

也就是说,在第一次迭代中,您可能期望得到String.fromCharCode(72)(即'H'),但实际上您得到的是String.fromCharCode(72, 0, chars) === 'H'x00'x00'

你可以通过一个回调函数来确保只有数组值被映射到字符:

chars.map(function(charCode) {
    return String.fromCharCode(charCode);
});

不要忘记map确实向它的回调传递了3个参数:项、索引和数组。这就是为什么您从String.fromCharCode.call(null, 114, 9, chars)String.fromCharCode.call(null, 108, 10, chars)等调用中获得"r'u0009""l'u000a"(或更好地称为"r't""l'n")回到数组中的原因。其他字符串的长度也将为2,只是在输出中看不到所有那些奇怪的控制字符。