参见英文答案 >
Why if([]) is validated while [] == false in javascript?3个
以下打印’A’是预期的,因为数据类型不同,因此数组被哄骗为原始形式,对于空数组是假的.
以下打印’A’是预期的,因为数据类型不同,因此数组被哄骗为原始形式,对于空数组是假的.
if ([] == false) console.log('A'); else console.log('B');
但是为什么以下代码也打印’A’?
if ([]) console.log('A'); else console.log('B');
解决方法
Why is
[] == false
is true
因为与原始值相比,数组的行为很奇怪.
特别是,当您将compare任何非布尔值设置为布尔值时,布尔值将作为数字处理.然后,当您将一个数字与一个对象进行比较时,该对象为converted to a primitive – 该数组之前的stringifies再次将其与该数字进行比较.现在,那个字符串is converted to a number使它们可以比较:
[] == false [] == 0 "" == 0 0 == 0
同样,你可以试试
[1] == true [1] == 1 "1" == 1 1 == 1
要么
[2] == true [2] == 1 "2" == 1 2 == 1
but just
[]
evaluates to true?