
Дмитрий
07.07.2017
08:09:48
Я просто смотрел исходники V8, что там у лисы я хз

Вишневый чай
07.07.2017
08:10:20
ну у лисы как то равномернее

Sergey
07.07.2017
08:10:25

Дмитрий
07.07.2017
08:10:30
Спека

Google

Gkio
07.07.2017
08:10:37
https://runkit.com/gkio/595f3ce73133a70012debd47

Дмитрий
07.07.2017
08:10:52
А в V8 функция на обычном жс (не C++, как многие считают) и не составило труда просто посмотреть, что в ней неоптимально

Sergey
07.07.2017
08:11:23
Спека
В спеке JS такое написано?

Дмитрий
07.07.2017
08:11:28
Да
По спеке ты обязан проверить и пропустить пустые элементы

Sergey
07.07.2017
08:11:54
Тогда тем более вопрос к тому кто эту спеку писал )

Дмитрий
07.07.2017
08:12:26
Ну в ней очень грамотный подход, который на коротком масштабе просто не оценить)
Спека — это то, что закладывается сразу на десятилетия, и мыслить нужно соответствующими категориями)

Sergey
07.07.2017
08:13:38

Дмитрий
07.07.2017
08:14:16
Он не массив иной длинны возвращает, я про это не говорил
Он именно что делает проверку и пуш в результаты
Ну будет у тебя на выходе 10 undefined
Но подход с проверками и пушем от этого не изменится)

Sergey
07.07.2017
08:14:58

Google

Дмитрий
07.07.2017
08:15:04
Да

Sergey
07.07.2017
08:15:12
if(!null) push

Дмитрий
07.07.2017
08:15:30
Про вторую ветку условия я ничего не говорил, потому что это не относилось к сути

Sergey
07.07.2017
08:15:59
Так. Пойду исходник почитаю. А то ты меня запутал )

Дмитрий
07.07.2017
08:17:56
Кароч, в массивах бывают дырки.
[,,,,,,,,10]
Спека обязывает тебя не вызывать функцию, если при map встречается такой пропуск

Sergey
07.07.2017
08:20:25
Повторю свой вопрос - зачем? )
Ну вызвал ты функцию с undefined в качестве параметра. Ничего страшного же не произойдет.

Вишневый чай
07.07.2017
08:23:22
будет лишний вызов функции же
проверить на Null дешевле

Konstantin
07.07.2017
08:26:06
Кароч, в массивах бывают дырки.
[,,,,,,,,10]
Спека обязывает тебя не вызывать функцию, если при map встречается такой пропуск
Так че, проверять на пустое значение и удалять его?

Дмитрий
07.07.2017
08:26:24
Пропускать индекс

Sergey
07.07.2017
08:26:36

Дмитрий
07.07.2017
08:26:40

Sergey
07.07.2017
08:27:11
Значит твоя функция на вход должна принимать функции
Иначе зачем ты будешь делать мап по этому массиву?
https://github.com/nodejs/node/blob/master/deps/v8/src/js/array.js#L1036

Вишневый чай
07.07.2017
08:27:46

Sergey
07.07.2017
08:28:18

Дмитрий
07.07.2017
08:28:52
А там undefined

Google

Дмитрий
07.07.2017
08:28:58
Ну

Sergey
07.07.2017
08:29:42
А там undefined
Значит ты словишь такой баг у себя в коде и в своем обработчике сделаешь проверку на undefined

Дмитрий
07.07.2017
08:30:08
Супер предложение ??
Смысл отсутствия элементов в массиве в том, что если его нет, то при проходе его тупо не нужно вызывать и парить этим голову пользователям языка

Sergey
07.07.2017
08:30:59
Супер предложение это писать свои костыли для того что бы мап был быстрым )

Дмитрий
07.07.2017
08:31:17
Но так как такое пока встречается прямо скажем, нечасто, реально написать реализацию без этой проверки, которая будет быстрее нативного мап

Winni
07.07.2017
08:32:26

Sergey
07.07.2017
08:32:57
Лично тебе я ничего не предьявляю. Просто пытаюсь понять почему тот кто писал спеку для языка сделал такую "оптимизацию" Просто ты единственный кто эту оптимизацию защищаешь )

Andrey
07.07.2017
08:33:33

Вишневый чай
07.07.2017
08:33:35

Sergey
07.07.2017
08:34:05
Да нет же. Говорит так должно быть )

Artyom
07.07.2017
08:34:20
А если
while(ln--) {
arr[ln] && fn(arr[ln], ln)
}
Какова скорость, интересно

Вишневый чай
07.07.2017
08:34:23

Sergey
07.07.2017
08:34:40

Дмитрий
07.07.2017
08:34:40

Artyom
07.07.2017
08:35:06

Дмитрий
07.07.2017
08:35:43
Сейчас проверю) Но общий принцип такой — не заставляй движок перебирать варианты и приводить к типу

Artyom
07.07.2017
08:35:44
Где об этом почитать, посоветуйте уже, наконец, книгу хорошую

Дмитрий
07.07.2017
08:36:04
Хз, эт опыт ? Я много времени потратил на такие исследования)

Google

Sergey
07.07.2017
08:36:16
Ну и кстати оно там в итоге в плюсы уходит.
На уровне js в цикле никаких проверок нет

Artyom
07.07.2017
08:37:18

Sergey
07.07.2017
08:37:31
А нет. есть if (i in array) {

Дмитрий
07.07.2017
08:37:35
null | 0
Я тащемта это в коде примера и юзаю, но с другой целью)

Алексей
07.07.2017
08:38:22
Народ, подскажите плиз , какая сейчас топовая библиотека для работы с мобильными событиями touch мульти тач , мув и тд?

Admin
ERROR: S client not available

Artyom
07.07.2017
08:43:53
Что быстрее ~~undefined === 0 или undefined === 0?

i
07.07.2017
08:45:52

Сергей
07.07.2017
08:46:46
эти выражения делают разные вещи

Artyom
07.07.2017
08:47:01

Дмитрий
07.07.2017
08:48:20
Блин, какой же jsperf уебанский
Прямо за гранью

Artyom
07.07.2017
08:49:13
Поэтому я спрашиваю, а не пишу сам =D

Дмитрий
07.07.2017
08:50:36
Он мне так и не дал нормально добавить дополнительные тесты

Artyom
07.07.2017
08:51:08

Дмитрий
07.07.2017
08:51:31
Оба варианта бессмыссленны)

Google

Дмитрий
07.07.2017
08:51:48
Короче, четвёрая ревизия показывает, что разница несущественна, но всё же лучше не заставлять движок приводить типы

Artyom
07.07.2017
08:51:59
Вопрос в том, как приводятся типы в == и может ли ~~ быть быстрее?

REWHEX
07.07.2017
08:52:11

Дмитрий
07.07.2017
08:53:00
~~ быстрее всех приводит строку к числу, в остальных случаях смысла в нём никакого
Повторюсь, не заставляй V8 заниматься приведением типов за тебя
Если тебе нужно убедиться что значение не пропущено, то просто сделай !== undefined

Artyom
07.07.2017
08:53:49

REWHEX
07.07.2017
08:54:03
Чииво
Это js?

i
07.07.2017
08:54:41
Мне кажется, что побитовое не в языках с динамической типизаций имеет вообще непредсказуемый результат

Дмитрий
07.07.2017
08:56:19
(!+[]+[]+![]).length = 9
Enjoy your js

Artyom
07.07.2017
08:59:41
?
Норм

i
07.07.2017
09:00:59
Классический js как он есть

Vyacheslav
07.07.2017
09:07:58
так. напишу еще раз.
есть такой массив:
[
{"order": 1, "task": 1},
{"order": 2, "task": 2},
{"order": 3, "task": 3},
{"order": 1, "task": 4},
{"order": 2, "task": 5},
{"order": 1, "task": 6}
];
мне надо сделать из него строку:
'order1': 3, 'order2': 2, 'order3': 1
решение уже было, но не совсем то. мне нужна именно строка а не массив с значениями(правильными, кстати говоря)
вот предыдущее решение:
arr.reduce((acc, { order }) => { acc[order] = (acc[order] || 0) + 1; result += "'state" + acc[order]; return acc; }, {})

Сергей
07.07.2017
09:11:50
Кто там убеждал что в чистом Js промисы синхронны
это нихуя не правда