Привет всем, я брат-арбуз фронтенда. Эта статья об относительно классическом вопросе фронтенд-интервью. В этой статье мы подробно проанализируем этот вопрос, углубимся в знания и дадим вам полное представление о решении этого вопроса. вопрос.
Это старый и гнилой вопрос в веб-интерфейсе, гнилой или гнилой, но я просто хочу сказать, что вступительные экзамены в колледж также проходят каждый год. Этот вопрос проверяет ваше знакомство с методами JavaScript.
Не давая прямого ответа, давайте сначала рассмотрим идею.
Array.prototype.map
прежде всегоArray.prototype.map
метод, который является методом экземпляра массива. Передайте функцию обратного вызова в карту, и карта будет проходить по элементам массива, передавать соответствующую информацию в функцию обратного вызова и принимать возвращаемое значение функции обратного вызова в качестве элемента соответствующего индекса нового массива и возвращать новый массив.
Функция обратного вызова может каждый раз получать текущую итерацию (1), элемент массива (2), значение индекса (3) и сам массив.
[1,2,3].map((value, index, array) => {
return value * 2;
})
// 返回 [2, 4, 6]
Если вы новичок, у вас могут возникнуть некоторые сомнения по поводу того, как реализован нижний слой этого черного ящика, поэтому я его реализуюArray.prototype.map
метод, чтобы читатели могли лучше понять.
Array.prototype.myMap = function(callbackfn) {
const arr = this;
const retArr = new Array(arr.length);
for (let i = 0; i < arr.length; i++) {
retArr[i] = callbackfn(arr[i], i, arr);
}
return retArr;
}
parseInt
Array.prototype.map
Метод на самом деле довольно простой, parseInt гораздо сложнее.
Роль функции parseInt заключается в преобразовании строки в число.
parseInt(string [, radix])
Принимает два параметра, первый параметр — это строка, которую нужно преобразовать. Второй параметр — основание строки.Например, если он равен 2, это означает, что строка выражена в двоичном формате. Важно отметить, что второй параметр является необязательным.
Ситуация усложняется, если второй параметр опущен. если строка начинается с0x
или0X
В начале он будет рассматриваться как шестнадцатеричный, в противном случае он будет рассматриваться как десятичный.
Вот некоторые примеры:
parseInt('10', 2);
// => 2。(1 * 2 + 0 * 1)
parseInt('0xa');
// => 10。被当作十六进制,等价于 parseInt('a', 16)
parseInt('123');
// => 123。被当作十进制,最常见的用法,
Теоретически основание счисления должно быть больше или равно 2 и меньше числа 36, иначе оно будет считаться недопустимым, верните NaN. Но есть значение, за исключением того, что это 0.
Когда основание второго параметра parseInt равно 0, parseInt будет рассматривать его как второй не переданный параметр, поэтому строка будет рассматриваться как десятичная.
Также возвращает NaN, если первый символ строки, не являющийся пробелом, не может быть преобразован в число.
вернуться к этой теме
['1', '2', '3'].map(parseInt)
ParseInt получает три параметра, предоставленные картой, в качестве функции обратного вызова.Благодаря тому, что JavaScript является очень удобным языком со слабой типизацией, не будет сообщено об ошибке, если количество переданных параметров не совпадает, и будут отброшены только неиспользуемые параметры. Установите значение «неопределенное».
Здесь parsetInt использует только два параметра:элемент массиваа такжезначение индекса. То есть:
parseInt('1', 0);
// 1 特殊情况,等价于parseInt('1')
parseInt('2', 1);
// NaN 没有一进制这种东西
parseInt('3', 2);
// NaN 没能找到合法字符,虽然 3 是数字,但它无法用来表达二进制,二进制只能为 0 和 1。
Таким образом, возвращаемый результат:[1, NaN, NaN]
.
Добро пожаловать в мой публичный аккаунт: фронтенд-арбузный брат. Поделитесь моими последними и самыми быстрыми техническими статьями по внешнему интерфейсу.