先上题:
console.log(([]) ? true : false);
console.log(([] == false ? true : false));
console.log(({} == false) ? true : false)
今天的这一道面试题主要是关于==
这个知识点的。
要想完全做懂此类型的题目,我们应该需要了解以下几个点。
- 基本类型的转化顺序。
String>Number>Boolean
==
只是去判断左右两边的字符的值是否一样。- 这里包含一个隐式转化。需要用到第一点中的知识。
- 个人理解:
==
的判断
在做这道题之前我们先来看以下几个式子:
console.log([]==true);//false
console.log(([])==true);//false
console.log({}==true);//false
console.log(({})==true);//false
console.log([]==false);//true
console.log(([])==false);//true
console.log({}==false);//false
console.log(({})==false);//false
console.log(Number({}));//NaN
console.log(Number(({})));//NaN
console.log(Number([]));//0
console.log(Number(([])));//0
上面第一行的式子中就是涉及到了隐式转换,这边我们参考规律的第四条,全部转换为number
类型,我们先看第三块的代码块。这里我测试的结果是:不管是不是被()
包裹转化的结果都是一致的。再回到第一二个代码块,我们就能很快捷的知道结果。结果见代码注释。
这里最主要的是[]
这里转换实际上是去转的''
然后空串是转化为false
最终转化为0
,然而{}
最终转化为NaN
我们在会过来看面试题:
第一行中判断[]
是否为true
根据上面规律第四条,我们可以知道[]
是转换为0的,false
也是转化为0的,所以最后结果为true
第二行中和第一行差不多的,左边和右边都为0
所以最后输出true
第三行中{}
转化为数字类型为NaN
,右边为0
所以为false
最后结果为 true true false