Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.02.2012, 11:34
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

Wat - забавное видео про особенности js
Думаю, многие уже видели (смотреть вторую половину):
https://www.destroyallsoftware.com/talks/wat

Мне показалось все знакомым и логичным, кроме сложения пустого объекта с пустым же массивом... Почему там 0?

П.с. Можно ли не брать на работу людей, которые не ответили на этот вопрос? =)

Последний раз редактировалось Snipe, 16.02.2012 в 11:41.
Ответить с цитированием
  #2 (permalink)  
Старый 16.02.2012, 11:49
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Кстати что странно, так это то, что только в консоли такие результаты;

alert({} + []);

Причем если выполнить в коде
console.log({} + []);

то будет "[object Object]", а если набрать в консоли это выражение то будет Number 0.

Также для {} + {} я ожидал увидеть "[object Object][object Object]", но в консоли будет NaN, если набрать. Однако если выполнить в коде
console.log({} + {})

то будет ожидаемое
__________________
readOnly

Последний раз редактировалось poorking, 16.02.2012 в 11:53.
Ответить с цитированием
  #3 (permalink)  
Старый 16.02.2012, 11:51
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

Если просто в коносли набрать, будет как на видео (способ ввода и результат связаны - это типа подсказка)...
Я уже нашел ответ в интернетах. Но публиковать пока не буду.

Последний раз редактировалось Snipe, 16.02.2012 в 11:53.
Ответить с цитированием
  #4 (permalink)  
Старый 16.02.2012, 12:11
Аватар для vasa_c
Профессор
Отправить личное сообщение для vasa_c Посмотреть профиль Найти все сообщения от vasa_c
 
Регистрация: 12.03.2008
Сообщений: 183

Сообщение от Snipe Посмотреть сообщение
П.с. Можно ли не брать на работу людей, которые не ответили на этот вопрос? =)
Если работа заключается в сложении массивов с объектами, то не стоит.
Ответить с цитированием
  #5 (permalink)  
Старый 16.02.2012, 12:32
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Snipe
Я уже нашел ответ в интернетах. Но публиковать пока не буду.
Сообщение от Snipe
Я уже нашел ответ в интернетах. Но публиковать пока не буду.
SPOILER

Лень искать, но я так понял фишка в том, что консоль(как и eval) возвращает значение последнего вычисленного выражения
eval показывает такие же результаты.
Вот только я не понял почему в одних случаях выдается результат всей операции, а в других только правая часть

SPOILER
Ответить с цитированием
  #6 (permalink)  
Старый 16.02.2012, 12:46
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

А ладно
ОТВЕТ
Суть в том, что {} в начале строки не является объявлением объекта, а является пустым блоком, который игнорируется. В итоге получается +[] или +{}
ОТВЕТ
Ответить с цитированием
  #7 (permalink)  
Старый 16.02.2012, 17:45
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от Snipe
Можно ли не брать на работу людей, которые не ответили на этот вопрос?
Если в Вашем коде такое встречается — то даже нужно.
Ответить с цитированием
  #8 (permalink)  
Старый 16.02.2012, 18:11
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

СПОЙЛЕР!!!!!!!!
СПОЙЛЕР!!!!!!!!
СПОЙЛЕР!!!!!!!!
СПОЙЛЕР!!!!!!!!


console.log - приводит к строкам, а оператор + приводит к числам, и соответственно пустой обьект превращается в nan. NaN + NaN = NaN.

но вот это вот я не понял вообще

>{}+[]
0

>NaN + 0
NaN

>NaN + ""
"NaN"
Ответить с цитированием
  #9 (permalink)  
Старый 16.02.2012, 18:40
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

[
         [],              // ' ', пусто потому что массив не содержит элементов
         {},              //[object Object] потому что нет length
         [].toString(),   // '' пусто
         {}.toString(),   // [object Object]
         {} + {},         //{}.toString() + {}.toString() [object Object][object Object]
         [] + [],         // ' ' + ' ' = ' '
         +[],             // 0, потому что (' ' == 0) = true, т.е. срабатывает неявное преобразование [].valueOf()
         +{}              //NaN
];


В остальном все зависит от реализации

Последний раз редактировалось monolithed, 16.02.2012 в 19:01.
Ответить с цитированием
  #10 (permalink)  
Старый 16.02.2012, 19:02
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

monolithed,
+[] вернет 0
+{} вернет NaN
____
{}+[] то же самое что NaN+0

а NaN + 0 будет нихуя не 0
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос про возможности JS для рисования и анимации macdack Библиотеки/Тулкиты/Фреймворки 3 15.07.2011 00:13
Про Вконтакте видео mycoding Оффтопик 11 09.01.2011 15:23
Вопрос про подключение js prog90 Общие вопросы Javascript 4 03.01.2011 18:48
Java - Здравствуйте, вопрос про написание js noobasik Оффтопик 16 28.07.2010 03:38