Это возвращает true:
[] == false
Но здесь вызывается предупреждение:
if([]){ alert('empty array is true here'); }
Можете ли вы объяснить, почему?
Это возвращает true:
[] == false
Но здесь вызывается предупреждение:
if([]){ alert('empty array is true here'); }
Можете ли вы объяснить, почему?
это связано с тем, что ==
в преобразовании JS-сил и если один тип может быть преобразован в другое, возвращаемое значение true
, а здесь, потому что []
невозможно изменить или сравнить с bool, это неверно
где as if([])
проверяет значения null
и undefined
, и поскольку [] не является ни нулевым, ни undefined, он возвращает true
проверить это Какой оператор равен (== vs ===) должен использоваться при сравнении JavaScript?
Согласно разделу 11.9.3 ECMAScript & reg; Language Specification, любое сравнение ==
выполняется следующим образом:
На первом этапе ToNumber()
применяется к false
и дает Number(0)
. На втором шаге правило # 9 применяет ToPrimitive()
к пустому массиву и дает ""
, который, преобразованный в числовое значение, также становится Number(0)
.
Дополнительно раздел 9.2 говорит об использовании объекта в выражении:
Абстрактная операция
ToBoolean
преобразует свой аргумент в значение типа Boolean в соответствии с этой таблицей: