Это, конечно, возвращает то, что вы ожидаете:
["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"]
Он также работает, если вы передаете дополнительные аргументы, заданные картой, поскольку это отбрасывает аргументы:
["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
имеет прототип объекта вместо прототипа Array, поэтому slice
есть undefined. Является ли причина вышеуказанного поведения, возможно, из-за чего-то вроде этого: где slice
или какая-либо другая аналогичная функция Array используется внутри?
["A","B","C"].map(function (x) {
return String.prototype.toLowerCase.apply(x, arguments.slice(1));
});
// --> TypeError: undefined is not a function