4

这按预期工作

[97,98].map(function(x){String.fromCharCode(x)})
// [ 'a', 'b' ]

但输出是以下行是意外的

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

2 回答 2

5

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

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

来源:https ://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map

编辑很久以后:另一种方法:

String.fromCharCode.apply(String, [97,98]);
// [ 'a', 'b' ]
于 2012-07-06T13:55:14.253 回答
0
       a2 = [97,98].map(function(x){return String.fromCharCode(x)});
       alert(a2);
       a2 = [97,98].map(String.fromCharCode);
       alert(a2);

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

于 2012-07-06T14:03:15.620 回答