JavaScript + Chrome: String.fromCharCode给出多余的字符
JavaScript + Chrome: String.fromCharCode giving extraneous characters?
谁能解释为什么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,只是在输出中看不到所有那些奇怪的控制字符。
相关文章:
- 使用php或javascript从facebook相册URL中删除多余的部分
- 在JavaScript中输出转义字符
- 不同浏览器中的空白字符正则表达式行为
- Regex匹配除“”之外的所有字符;.js”;
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 使用RegExp查找url中的字符
- 如何为jQuery屏蔽输入插件创建一个允许字母数字、空格和重音字符的掩码
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 允许在文本框中使用某些字符
- 根据页面的位置突出显示文本中的字符
- 元素的内容必须由格式正确的字符数据或标记组成
- 如何将字符串拆分为字符,但在javascript中保留空格
- 使用Google Maps API向标记添加多个字符
- 删除给定字符前的多余空格
- 如何防止正则表达式中字符串末尾出现多余字符
- JavaScript正则表达式,用于删除特殊字符和多余空格,同时保留逗号
- 将电话号码格式化为10位数字/删除多余字符
- 如何设置剑道UI编辑器的selecterange来突出显示多余的字符,如Twitter
- JavaScript + Chrome: String.fromCharCode给出多余的字符
- jQuery子字符串或正则表达式,用于从序列化字符串中删除多余的字符