Javascript [97,98].map的奇怪输出(String.fromCharCode)

Javascript [97,98].map的奇怪输出(String.fromCharCode),javascript,ecmascript-5,Javascript,Ecmascript 5,这是意料之中的事 [97,98].map(function(x){String.fromCharCode(x)}) // [ 'a', 'b' ] 但输出如下所示,这是意外的 [97,98].map(String.fromCharCode) // [ 'a\u0000\u0000', 'b\u0001\u0000' ] String.fromCharCode可以接受可变长度的参数,并将每个参数视为字符代码来构建字符串参数。长度字符长度 map将多个参数传递给内部函数。显然,第一个是当前项的值

这是意料之中的事

[97,98].map(function(x){String.fromCharCode(x)})
// [ 'a', 'b' ]
但输出如下所示,这是意外的

[97,98].map(String.fromCharCode)
// [ 'a\u0000\u0000', 'b\u0001\u0000' ]

String.fromCharCode
可以接受可变长度的参数,并将每个参数视为字符代码来构建字符串
参数。长度
字符长度

map
将多个参数传递给内部函数。显然,第一个是当前项的值。第二个是数组中的索引,它是
\u0000
\u0001
的来源(添加更多字符代码,您将得到
\u0002
\u0003
)。第三个参数是对正在遍历的数组的引用,该数组被转换为数字
0

资料来源:

编辑得越来越晚:另一种方法:

String.fromCharCode.apply(String, [97,98]);
// [ 'a', 'b' ]

Linux上Firefox13的两个警报“a,b”。第一个函数缺少返回语句。

第一个函数返回我
[未定义,未定义]
第二个函数
[“a”,“b”]
在Chrome控制台中,您在哪里测试过?@Calvein firefox给出
[“a\x00\x00”,“b\x01\x00”]
,Chrome给出
[“a”,“b”]
两者都给出相同的控制字符,但chrome只是不打印控制字符。我使用了
JSON.stringify
来确保输出向我显示控制字符。@Calvein在coffeescript REPL中对其进行了测试,在将它转换为javascript时,我忘记了
return
语句。本文探讨了在这种情况下发生的情况。
       a2 = [97,98].map(function(x){return String.fromCharCode(x)});
       alert(a2);
       a2 = [97,98].map(String.fromCharCode);
       alert(a2);