Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Задачка из твиттера (https://javascript.ru/forum/misc/6597-zadachka-iz-tvittera.html)

Kolyaj 08.12.2009 10:39

Задачка из твиттера
 
+{} is NaN, why +[] is 0, +[1] is 1, but +[1,2] is NaN?

В топик призываются гуры стандартов ))

subzey 08.12.2009 10:55

Рискну предположить
Number(Object().toString()); // = Number("[objectObject]") = NaN
Number(Array().toString()); // = Number("0") = 0
Number(Array(1).toString()); // = Number("1") = 1
Number(Array(1, 2).toString()); // = Number("1,2") = NaN

Кстати, parseInt([1, 2]) вернет-таки значение 1. :)

Kolyaj 08.12.2009 11:28

subzey,
пожалуй ты прав.

Dmitry A. Soshnikov 08.12.2009 11:32

http://habrahabr.ru/blogs/javascript...omment_2233654 ah?

Dmitry A. Soshnikov 08.12.2009 11:57

ECMA-262-3: 11.4.6 Унарный оператор +.

Вообще, может зависеть не только от toString(), но и от valueOf(), т.к. ToNumber (9.3/9.3.1) вызывает преобразование ToPrimitive.

Соответственно, если переопределить toString/valueOf результат может варьировать.

Цитата:

Сообщение от subzey
Number(Array().toString()); // = Number("0") = 0

= Number("") = 0

Цитата:

Сообщение от subzey
Кстати, parseInt([1, 2]) вернет-таки значение 1.

А там тоже первым делом toString() вызывается ;)

Kolyaj 08.12.2009 12:01

Dmitry A. Soshnikov,
угу, я про toString не подумал сначал.


Часовой пояс GMT +3, время: 20:13.