Непонимание системы типов JavaScript - PullRequest
2 голосов
/ 16 марта 2011
var foo=[0];
if(foo) alert('first');
if(foo==true) alert('second');

Скажите пожалуйста, почему не работает второе оповещение?В первом предупреждении foo приводит к Boolean, поэтому

Boolean(foo);
//true

Если "foo" равно "true", почему второе предупреждение не работает?

Ответы [ 3 ]

5 голосов
/ 16 марта 2011

Здесь

if (foo) предупреждает, потому что foo не равно нулю и условие оценивается как true.

Однако это не означает, что fooсамо по себе равно true, поэтому второе предупреждение не отображается.

1 голос
/ 16 марта 2011

Поскольку существует разница между преобразованием foo в логическое значение (которое работает для массива) и сравнением foo в true.

В последнем случае это сравнение1006 * без преобразования, а foo явно не то же самое, что true.Обратите внимание, что преобразование все же происходит: foo == true - это false, который в конечном итоге "конвертируется" в false для if.:)

1 голос
/ 16 марта 2011

Поскольку изначально foo является Array, а не Boolean, и вы сравниваете foo с логическим значением. if (...) -оценка оценивается как true или false, а foo == true здесь - как false. Если вы использовали if (!!foo == true) (или просто if (!!foo)) или if (foo != null) или if (foo), то второе оповещение сработало бы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...