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