Используя консоль Chrome, это мой ввод и вывод:
[0].map(Array);
[[0, 0, [0]]]; // output
Что здесь происходит?
РЕДАКТИРОВАТЬ
Это вызывает у меня любопытство, потому что что-то вроде
[0].map(String);
Вернется
["0"];
И нет
["0", "0", "String"]
javascript
Джексонкр
источник
источник
['10', '10', '10'].map(parseInt)
.map()
поведение: stackoverflow.com/questions/14528397/… В общем, вы должны быть осторожны при использовании.map()
с функциями, которые принимают более одного аргумента.[0].map(console.log)
Ответы:
.map()
Функция является вызовArray()
функции с тремя аргументами, значением элемента массива , который0
, индекс этого элемента, а также0
, и ссылкой на весь массив.Вот так:
Возвращенный к этому моменту массив
Array()
становится первым элементом создаваемого массива.map()
, следовательно, в вашем[[0, 0, [0]]]
результате появляется дополнительный уровень вложенности .ИЗМЕНИТЬ в отношении вашего редактирования: когда вы говорите,
[0].map(String);
что в результатеString()
вызывается с теми же тремя аргументами, какString(a[index], index, a)
, ноString()
функция игнорирует все, кроме первого аргумента, тогда какArray()
использует все предоставленные аргументы.источник
Во-первых ,
Array
может использоваться как функция для создания массивов:Во-вторых ,
map
своему обратному вызову передает три параметра: элемент, его индекс из массива и сам массив.Итак , поскольку ваш массив содержит один элемент, строка:
эквивалентно:
источник
После того, как вы обновили вопрос. Другие ответы предоставляют вам информацию о карте
Чтобы ответить, почему массив и строка различаются, взгляните на конструкторы
Конструктор String принимает 1 параметр String (thing), а массив new Array (element0, element1 [, ... [, elementN]])
источник
.map(Number)
каждый элемент преобразуется в число, а не возвращается что-то подобное[3, 2, [4, 1, 3]]
для каждого элемента.Этот звонок
дает такой же результат, как если бы вы написали что-то вроде этого:
Функция карты вызывает функцию массива с тремя параметрами: значением элемента, индексом элемента и целым массивом. Этот вызов
Array
возвращает вам массив с 3 элементами: значение (число0
), индекс (число0
), весь массив ([0]
).И этот новый массив обернут в исходный массив, потому что вы сопоставили исходный элемент (номер
0
) с новым элементом (массив из 3 элементов)Примечание: вы могли использовать только первый параметр, как в
или используя всего два, чтобы получить также индекс
Но вы должны помнить, что по-
map
прежнему предоставляет 3 параметра, которые вы просто игнорируете в своей функции обратного вызова. Это также причина того, почему код вроде:возвращается
Это потому, что функция String заботится только о первом параметре и игнорирует другие переданные параметры. Если вы позвоните
ты все равно получишь
источник