Serhiy
Если я все правильно помню сколько элементов у массива на входе столько и на выходе должно быть
Serhiy
И не важно null оно или undefined
CherryTea
CherryTea
CherryTea
какая-то нереальная разница
Дима
Дима
Дима
Я просто смотрел исходники V8, что там у лисы я хз
CherryTea
ну у лисы как то равномернее
Serhiy
Дима
Спека
Suicide Liza
https://runkit.com/gkio/595f3ce73133a70012debd47
Дима
А в V8 функция на обычном жс (не C++, как многие считают) и не составило труда просто посмотреть, что в ней неоптимально
Serhiy
Спека
В спеке JS такое написано?
Дима
Да
Дима
По спеке ты обязан проверить и пропустить пустые элементы
Serhiy
Тогда тем более вопрос к тому кто эту спеку писал )
Дима
Ну в ней очень грамотный подход, который на коротком масштабе просто не оценить)
Дима
Спека — это то, что закладывается сразу на десятилетия, и мыслить нужно соответствующими категориями)
Дима
Он не массив иной длинны возвращает, я про это не говорил
Дима
Он именно что делает проверку и пуш в результаты
Дима
Ну будет у тебя на выходе 10 undefined
Но подход с проверками и пушем от этого не изменится)
Дима
Да
Serhiy
if(!null) push
Дима
Про вторую ветку условия я ничего не говорил, потому что это не относилось к сути
Serhiy
Так. Пойду исходник почитаю. А то ты меня запутал )
Дима
Кароч, в массивах бывают дырки.
[,,,,,,,,10]
Спека обязывает тебя не вызывать функцию, если при map встречается такой пропуск
Serhiy
Повторю свой вопрос - зачем? )
Serhiy
Ну вызвал ты функцию с undefined в качестве параметра. Ничего страшного же не произойдет.
CherryTea
будет лишний вызов функции же
CherryTea
проверить на Null дешевле
👨🏼💻
Кароч, в массивах бывают дырки.
[,,,,,,,,10]
Спека обязывает тебя не вызывать функцию, если при map встречается такой пропуск
Так че, проверять на пустое значение и удалять его?
Дима
Пропускать индекс
Serhiy
будет лишний вызов функции же
Только в том случае если у тебя большой массив с кучей дырок. По факту я с таким сталкивался пару раз от силы
Дима
Serhiy
Значит твоя функция на вход должна принимать функции
Serhiy
Иначе зачем ты будешь делать мап по этому массиву?
Serhiy
https://github.com/nodejs/node/blob/master/deps/v8/src/js/array.js#L1036
CherryTea
Дима
Дима
А там undefined
Дима
Ну
Serhiy
А там undefined
Значит ты словишь такой баг у себя в коде и в своем обработчике сделаешь проверку на undefined
Дима
Супер предложение 👍👍
Дима
Смысл отсутствия элементов в массиве в том, что если его нет, то при проходе его тупо не нужно вызывать и парить этим голову пользователям языка
Serhiy
Супер предложение это писать свои костыли для того что бы мап был быстрым )
Дима
Но так как такое пока встречается прямо скажем, нечасто, реально написать реализацию без этой проверки, которая будет быстрее нативного мап
Winni
Serhiy
Лично тебе я ничего не предьявляю. Просто пытаюсь понять почему тот кто писал спеку для языка сделал такую "оптимизацию" Просто ты единственный кто эту оптимизацию защищаешь )
Andrey
CherryTea
Serhiy
Да нет же. Говорит так должно быть )
Anonymous
А если
while(ln--) {
arr[ln] && fn(arr[ln], ln)
}
Какова скорость, интересно
Serhiy
Дима
Anonymous
Дима
Сейчас проверю) Но общий принцип такой — не заставляй движок перебирать варианты и приводить к типу
Anonymous
Где об этом почитать, посоветуйте уже, наконец, книгу хорошую
Дима
Хз, эт опыт 😁 Я много времени потратил на такие исследования)
Serhiy
Ну и кстати оно там в итоге в плюсы уходит.
Serhiy
На уровне js в цикле никаких проверок нет
Serhiy
А нет. есть if (i in array) {
Дима
null | 0
Дима
Я тащемта это в коде примера и юзаю, но с другой целью)
Алексей
Народ, подскажите плиз , какая сейчас топовая библиотека для работы с мобильными событиями touch мульти тач , мув и тд?
Anonymous
Что быстрее ~~undefined === 0 или undefined === 0?
Sergey
Sergey
эти выражения делают разные вещи
Anonymous
Дима
Блин, какой же jsperf уебанский
Дима
Прямо за гранью
Anonymous
Поэтому я спрашиваю, а не пишу сам =D