2016-08-02 4 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

Я думал, что даже строка введите весь путь до цепочки, унаследованной от массива. Но это хорошо знать. –

Смежные вопросы