2016-09-20 19 views
-1

Я думаю, что в каждом языке я знаюJavascript: Если ([]) неожиданный результат

if(a) 

это то же самое, как

if(a == true) 

Оказывается, в JavaScript это не так, потому что:

if([]) 

Кажется, действовать, как если условие выполнено, но:

if([] == true) 

Противоположная вещь.

Я не могу найти никакого объяснения, особенно, что эта проблема не возникает с пустой строкой, например (== true, но не === true, то же, что и пустой массив). Это ошибка в JavaScript или что?

+1

'if (a) [...] тот же, что и [...] if (a == true)' - erm, это может быть просто PHP и, возможно, Python? Не совсем универсально, чтобы преобразовать произвольное значение в логическое. Во всяком случае, [здесь] (http://dorey.github.io/JavaScript-Equality-Table/) заключается в том, как истинные/ложные значения работают в JS. – vlaz

ответ

2

В JavaScript есть понятие правдивых и ложных значений. if заявления проверяют правдоподобие или ложность данного значения, а не строгое равенство true или false.

true очевидно правдивый. false явно ложно. Остальное может быть немного сложным. У MDN есть, возможно, самая четкая документация о том, какие значения оцениваются как ложные: https://developer.mozilla.org/en-US/docs/Glossary/Truthy

В этом случае [] является правдивым значением, поэтому условие проходит и выполняется код.

Смежные вопросы