为什么不传递toUpperCase来映射工作

时间:2017-02-03 16:11:28

标签: javascript

昨天我正在看一个问题,其中海报询问如何转换数组内容的大小写。我知道我可以将一个函数的引用传递给map:

function appendText (el){
    return el += ' - appended text';
}

['a','b'].map(appendText);  //["a - appended text", "b - appended text"]

但是当我尝试

array.map(String.toUpperCase);
array.map(String.prototype.toUpperCase);

我收到错误

  

未捕获的TypeError:String.prototype.toUpperCase在null或undefined上调用

这听起来好像方法没有通过元素map,据我所知,它会传递。为什么这不起作用?

1 个答案:

答案 0 :(得分:1)

您没有向prototype / extension方法传递任何内容。只需使用箭头函数传递数组项的值。

要回答问题背后的逻辑,您根本无法传递无上下文(例如,无this)原型方法(即来自基础String类)。 map将按名称运行该函数,并将值作为第一个参数(如appendText(a)所示)



function appendText (el){
    return el += ' - appended text'
}

var array = ['a','b']

console.log(array.map(appendText))
console.log(array.map(a => appendText(a)))
console.log(array.map(a => a.toUpperCase()))