Что означает термин [0] == ![0]? Хотя они возвращают true. Но мне нужно объяснить, как он возвращает true, поскольку тип [0] является объектом, а! [0] возвращает логическое значение? Так как они равны? Спасибо

1
Codegiant 30 Янв 2013 в 00:32

3 ответа

Лучший ответ

![0] просто false, так как все не - null объекты приводятся к true.

Сравнивая [0] и false, они преобразуются в числа - не спрашивайте почему, так оно и есть. [0] сначала преобразуется в строку "0" (массивы преобразуются в строки путем объединения записей с , для разделителя), то есть числом 0. false приведен к номеру 0, и вот оно у вас: [0] == ![0] эквивалентно 0 == 0, что верно.

8
Niet the Dark Absol 29 Янв 2013 в 20:37

Чтобы понять это, сначала пройдите ![0] выражение. Он оценивается как false - поскольку [0] (как любой объект в JS) является истинным значением. Таким образом, заявление становится ...

[0] == false

Теперь это проще: false преобразуется в 0 (для логического -> числового правила), а [0] преобразуется правилом Object-To-Primitive - сначала в '0' ( Строка), затем до 0 (Число). Очевидно, 0 равно 0. )

Постскриптум И да, это может показаться довольно странным, но оба ...

[0] == false

... а также ...

![0] == false

... оцените true: первое уже объяснено, второе просто false == false. Кто-нибудь еще удивлен этими == предупреждениями Lint? )

7
raina77ow 29 Янв 2013 в 20:47

Вы разделили выражение на несколько частей:

typeof([0]) // "object"
[0] == true // false
![0] == true // false
![0] == false // true

Причина этого в том, что в JavaScript только значение 1 неявно преобразуется в true, поэтому все остальные значения преобразуются в false. ![0] только отрицает ложное выражение, таким образом, оно становится (false == false) == true.

0
grundprinzip 29 Янв 2013 в 20:38