LadderLay/JavaScript365

说明以下表达式的输出结果及其原因

Opened this issue · 0 comments

题目

if([]){console.log(1);}
if([].length){console.log(2);}
if({} === {}){console.log(3);}
if(''==0){console.log(4);}

分析

  1. if([]){console.log(1);}
    在js中,
    false的情况有:省略或值为0,-0,null,false,NaN,undefined,或空字符串("")
    true的情况有:除上述情况以外的所有其他值,包括任何对象,**空数组([])**或字符串“ false”
    因此,此处的[]空数组的布尔值为真,输出结果为1

  2. if([].length){console.log(2);}
    显然,[].length=0 布尔值为false,输出为undefined

3.if({} === {}){console.log(3);}
==对于基本类型,比较的是值是否相同;对于引用类型,比较的是引用是否相同。
显然此处比较的是引用。输出为undefined

4.if(''==0){console.log(4);}
在js中,当被比较值A(String)和被比较值B(Number)进行比较时,
A == B会被转换为ToNumber(A) === B
此处输出为4
参考链接

结尾

  • == & equals 的异同
  • js 中,空字符串""布尔值为假