map
数组对象的列表处理例程有时非常方便。这是使用它的便捷方法之一:
var numarr = [1,2,3,4];
console.log(numarr.map(String))
>>> ["1", "2", "3", "4"]
到目前为止,我认为这是理所当然的。然而,今天我对此感到困惑。上面的map
函数返回的是一个字符串数组。我们通常将函数map
作为参数传递给。在上述情况下,我们传递String
对象。String
是在Javascript实现里面实现的,所以不知道有什么特长。上面的代码就像为数组中的每个项目创建一个new
实例一样。String
如果不清楚,请考虑这个。如果我决定用 Javascript say 实现一个对象MyString
并将其传递给map
,我将不会得到上述行为。
function MyString(x) { this.val = x; }
MyString.prototype.toString = function () { return String(this.val); };
var ms = new MyString(4)
console.log(String(ms));
>>> "4"
var arr = [1,2,3];
arr.map(MyString)
>>> [undefined, undefined, undefined]
有谁知道为什么 arr.map(String) 会这样工作?
更新:我在下面添加的评论更好地阐明了我的问题。