Wat - забавное видео про особенности js
Думаю, многие уже видели (смотреть вторую половину):
https://www.destroyallsoftware.com/talks/wat Мне показалось все знакомым и логичным, кроме сложения пустого объекта с пустым же массивом... Почему там 0? П.с. Можно ли не брать на работу людей, которые не ответили на этот вопрос? =) |
Кстати что странно, так это то, что только в консоли такие результаты;
alert({} + []); Причем если выполнить в коде console.log({} + []); то будет "[object Object]", а если набрать в консоли это выражение то будет Number 0. Также для {} + {} я ожидал увидеть "[object Object][object Object]", но в консоли будет NaN, если набрать. Однако если выполнить в коде console.log({} + {}) то будет ожидаемое |
Если просто в коносли набрать, будет как на видео (способ ввода и результат связаны - это типа подсказка)...
Я уже нашел ответ в интернетах. Но публиковать пока не буду. ;) |
Цитата:
|
Цитата:
Цитата:
Лень искать, но я так понял фишка в том, что консоль(как и eval) возвращает значение последнего вычисленного выражения eval показывает такие же результаты. Вот только я не понял почему в одних случаях выдается результат всей операции, а в других только правая часть SPOILER |
А ладно
ОТВЕТ Суть в том, что {} в начале строки не является объявлением объекта, а является пустым блоком, который игнорируется. В итоге получается +[] или +{} ОТВЕТ |
Цитата:
|
СПОЙЛЕР!!!!!!!!
СПОЙЛЕР!!!!!!!! СПОЙЛЕР!!!!!!!! СПОЙЛЕР!!!!!!!! console.log - приводит к строкам, а оператор + приводит к числам, и соответственно пустой обьект превращается в nan. NaN + NaN = NaN. но вот это вот я не понял вообще >{}+[] 0 >NaN + 0 NaN >NaN + "" "NaN" |
[ [], // ' ', пусто потому что массив не содержит элементов {}, //[object Object] потому что нет length [].toString(), // '' пусто {}.toString(), // [object Object] {} + {}, //{}.toString() + {}.toString() [object Object][object Object] [] + [], // ' ' + ' ' = ' ' +[], // 0, потому что (' ' == 0) = true, т.е. срабатывает неявное преобразование [].valueOf() +{} //NaN ]; В остальном все зависит от реализации |
monolithed,
+[] вернет 0 +{} вернет NaN ____ {}+[] то же самое что NaN+0 а NaN + 0 будет нихуя не 0 |
Часовой пояс GMT +3, время: 00:58. |