2016-05-25 3 views
1

Я пытаюсь понять этот код, который использует Array.map()заполнить значения массива с помощью array.map

var char_set = Array.apply(null, Array(256)).map(Boolean.prototype.valueOf, false); 

Приведенный выше код создает массив с индексами от 0-255 и каждое значение устанавливается до false

Может кто-нибудь объяснить, как этот массив создается с помощью этого метода map. Синтаксис map метода является

arr.map(callback[, thisArg]) 

В моем случае это thisArg набор для false?

+2

Было бы проще сделать 'новый массив (256) .Нанести (ложь)'. –

ответ

4

Array.apply(null, Array(256)): создаст массив из 256 элементов со значением не определено во всех элементах

map(…): используется для инициализации всех значений ложной

Первый аргумент в map принимает функцию обратного вызова; Boolean.prototype.valueOf - это функция, которая будет действовать как обратный вызов.

true.valueOf() возвращает true, но он должен быть вызван с помощью этогоArg.
    |
    ---------- верно, thisArg

false.valueOf() возвращается false, но он должен быть вызван с thisArg.
    |
    ---------- ложным является thisArg

map(Boolean.prototype.valueOf, false), когда вызывается для каждого элемента массива он будет проходить false, как this к Boolean.prototype.valueOf методу. Он так же хорош, как и вызов false.valueOf(), поэтому он всегда возвращает false.

map(Boolean.prototype.valueOf, false) Таким образом эквивалентно:
map(function(item){ return false.valueOf() });

Смежные вопросы