Сводный обзор
- Базовые сетевые вопросы на предварительном собеседовании (длинный текст из 10 000 слов)
- Интервьюер: Сколько горизонтальных и вертикальных макетов по центру вы можете создать (фиксированная ширина и высота и переменная ширина и высота)
- Вопрос из интервью интернет-знаменитости (появлялся в интервью Tencent и Baidu)
- Просмотрите эту привязку, область действия, цепочку областей действия и закрытие с помощью механизма среды выполнения.
- Советы по работе с JS, работа проста
- Глубокое понимание стеков, куч и очередей, а также беспроблемные собеседования
- Интервьюер: Пожалуйста, реализуйте макет трех столбцов, как можно больше способов.
- Каковы плюсы и минусы виртуального DOM
- Отвечая таким образом на наследование, интервьюер может быть более удовлетворен
- 10 различий между стрелочными функциями и обычными функциями
- html пустой заполнитель китайского символа
- Я хотел бы узнать больше о том, как судить о массиве
- Написание электронной почты в формате HTML
- Знания указывают на то, что Vue Router игнорируется нами
задний план
Когда я вчера читал письменный тестовый вопрос, я думал, что это очень просто, но результат был не таким, как я себе представлял, поэтому я сразу перешел к письменному тестовому вопросу.
const array = new Array(5).map((item) => {
return item = {
name: '1'
}
});
console.log(array);
// 请写出输出结果
Мой воображаемый ответ: [{имя: '1'}, {имя: '1'}, {имя: '1'}, {имя: '1'}, {имя: '1'}];
Фактический ответ: [пусто × 5]
Почему это происходит?
угадай 1
Моя первая мысль заключается в том, что массив, сгенерированный new Array(5), [undefined, undefined, undefined, undefined, undefined].
const array = [undefined, undefined, undefined, undefined, undefined];
const newArr = array.map((item) => {
return item = {
name: '1'
}
});
console.log(newArr);
// 结果是[{name: '1'}, {name: '1'}, {name: '1'}, {name: '1'}, {name: '1'}];
угадай 1 неправильно
угадай 2
Массив, сгенерированный new Array(5), не имеет значения в каждом элементе, что означает, что генерируется массив из [].
const array = [,,,,,];
const newArr = array.map((item) => {
return item = {
name: '1'
}
});
console.log(newArr);
// 结果是[empty × 5];
думаю 2 верно
Зачем
map calls a provided callback function once for each element in an array, in order, and constructs a new array from the results. callback is invoked only for indexes of the array which have assigned values (including undefined).
It is not called for missing elements of the array; that is:
- indexes that have never been set;
- which have been deleted; or
- which have never been assigned a value.
map вызывает предоставленную функцию обратного вызова один раз для каждого элемента в массиве по очереди, а затем создает новый массив из результата. -----Только обращения к индексам массива присваиваемых значений (включительно)----. Функция обратного вызова функции карты будет вызываться только для элементов, которым было присвоено значение. новый массив (1) не совпадает с [undefined]. new Array(1) не присваивает значение элементу массива, а [undefined] присваивает неопределенное значение элементу массива.
Суммировать
- Массив, созданный new Array(5), представляет собой массив без значений, присвоенных элементам в массиве.
- map только делает вызовы обратного вызова для индексов массива присвоенных значений (включительно).
оптимизированная обработка
// 处理1
const array = new Array(5).fill().map((item) => {
return item = {
name: '1'
}
});
console.log(array);
// [{name: '1'}, {name: '1'}, {name: '1'}, {name: '1'}, {name: '1'}];
// 处理2
var array = Array.apply(0,{length:5}).map((item) => {
return item = {
name: '1'
}
});
console.log(array);
// [{name: '1'}, {name: '1'}, {name: '1'}, {name: '1'}, {name: '1'}];