当然,这会返回您所期望的结果:
["A","B","C"].map(function (x) {
return x.toLowerCase();
});
// --> ["a", "b", "c"]
使用 String.prototype.toLowerCase.call 也是如此:
["A","B","C"].map(function (x) {
return String.prototype.toLowerCase.call(x);
});
// --> ["a", "b", "c"]
如果您传递 map 给出的额外参数,它也会起作用,因为它会丢弃参数:
["A","B","C"].map(function (x, index, arr) {
return String.prototype.toLowerCase.call(x, index, arr);
});
// --> ["a", "b", "c"]
但是,这不起作用:
["A","B","C"].map(String.prototype.toLowerCase.call);
// --> TypeError: undefined is not a function
以下也不起作用,因为arguments
有对象原型而不是数组原型,所以slice
其上未定义。造成上述行为的原因可能是这样的——哪里slice
或者内部使用了其他类似的数组函数?
["A","B","C"].map(function (x) {
return String.prototype.toLowerCase.apply(x, arguments.slice(1));
});
// --> TypeError: undefined is not a function