2016-08-02 73 views
0

有这个很简单.map功能为什么这个.MAP功能不起作用

var numbers = [1, 4, 9]; 
var roots = numbers.map(Math.sqrt); 

这是有道理的,我就numbers执行映射功能,并提供将遍历数组中的迭代每个元素的功能。

在下面这个例子中(所有这些都取自mozilla,https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map),我想我自己为什么要用Array.prototype.map.call,也许他们只是展示了不同的方式来完成相同的目标。

var str = '12345'; 
Array.prototype.map.call(str, function(x) { 
    return x; 
}).reverse().join(''); 

所以我改写了这个作为

var str = '12345'; 
var stringy = str.map(function(x) { 
    return x; 
}).reverse().join(''); 

除非我得到一个错误 “str.map不是一个函数(......)” 这是为什么?

+5

它应该是'str.split(“”).map()'?如果我没有错,['map()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)用于数组,而不是字符串 –

+1

'str'不是一个数组,所以它没有'map'方法。 'Array.prototype.map.call'将字符串转换为数组。 – undefined

+0

@LambdaNinja你应该发布这个答案。 – Santi

回答

4

这是因为str是一个字符串,字符串没有map()函数。

map()是数组类型的函数。

+0

我甚至认为字符串键入从链中继承的所有数组,但这很好理解。 –