1. console.log(['1','2','3'].map(parseInt));
Авторитетная оригинальная ссылка Опасность необязательных аргументов JavaScript
-
Ответ: [1,NaN,NaN]
-
Анализ: я знаю ответ на этот вопрос, потому что этот вопрос
网红题
Чтобы проанализировать его, давайте посмотрим
отобразить этот метод он или вернуться调函数的参数
, и его использование
//这是MDN
var array1 = [1, 4, 9, 16];
// pass a function to map
const map1 = array1.map(x => x * 2);
console.log(map1);
// expected output: Array [2, 8, 18, 32]
- грамматика
var new_array = arr.map(function callback(currentValue[, index[, array]]) {
// Return element for new_array }[,
thisArg])
-
параметр
-
callback
Функция, которая генерирует новый элемент массива, используя три аргумента:
-
currentValue
callback
Текущий элемент обрабатываемого массива. -
**
index
необязательный**看到这里先注意起来这个参数,思考一下
callback
Индекс текущего элемента в обрабатываемом массиве. -
array
необязательныйcallback
map
Массив методов для вызова.
thisArg
необязательный
воплощать в жизньcallback
Используется при функцияхthis
стоимость.
- map также является очень полезным методом прототипа массива, всем он знаком, так что теперь давайте посмотрим
parseInt
,Сюда
что они зажгут
причина
- Обратите внимание на двух парней выше, далее легко объяснить
- Причина: Собственно
map
изcallback
Второй параметр index, который является индексом текущего элемента, принимается какparseInt
второй параметрradix
использовать
Подумайте об этом, мы изначально думали, что наши три звонка были такими
parseInt('1')
parseInt('2')
parseInt('3')
на самом деле так называется
parseInt('1',0,theArray);
parseInt('2',1,theArray);
parseInt('3',2,theArray);
Итак, вот и вопрос, как индекс влияет на систему счисления?
-
В первый раз, когда я впервые назвал это так:
parseInt('1',0)
Это не проблема. Преобразуйте его в десятичное число. Посмотрите на картинку в моей красной рамке.- возвращает 1
-
Во второй раз второй индексный параметр вызова равен 1, что также означает, что 1 используется в качестве основы для значения. В спецификации четко указано, что если основание не равно нулю или меньше 2, функция не будет запрашивать строку и напрямую возвращать NaN.
-
В третий раз в качестве базы используется 2. Это означает, что строка будет разобрана как количество байтов, т.е. содержащая только значения 0 и 1. Шаг 11 спецификации для parseInt гласит, что он пытается проанализировать только левую часть первого символа, который еще не является допустимым числом, для которого требуется основание. Первый символ этой строки — «3», что не является допустимым числом по основанию 2. Таким образом, эта подстрока будет проанализирована как пустая. Шаг 12 гласит: если подстрока анализируется как пустая, функция вернет NaN.
- Таким образом, результат здесь должен быть [1,NaN,NaN].
решить
Проблема здесь в том, что легко упустить из виду, что для parseInt требуются два параметра. В карте есть три параметра. Таким образом, комбинация здесь приводит к вышеуказанной проблеме.Напишите по-другому:
['1','2','3'].map(function(value){
return parseInt(value)
})
Таким образом, вы не ошибетесь.
Конечно, мы также можем написать:
['1','2','3'].map(Number)
На этом все закончилось, продолжу позже