对的你没看错,这是道很基础的面试题,昨天恰好面试到了,没答上出来。javascript
直接说答案吧,返回是true
java
若是你看《Javascript权威指南第6版》的话,从75-76页里面关于==的转换面试
上图的意思就是segmentfault
if (两个操做数的类型是相同){
同严格相等的比较规则同样(如下文会解释严格相等的比较规则)
}
else if(两个操做数的类型不相同){
if(null == undefined) {
return true;
}else if(a是数字,b是字符串){
将字符串转换为数字,而后使用转换后的值进行比较。
}else if(两个值中有一个是true的话){
将其转换为1再进行比较
}else if(两个值中有一个是false的话){
将其转换为0再进行比较
}else if(若是一个值是对象,另外一个值是数字或字符串){
将对象转换为原始值,转换规则在《Javascript权威指南第6版》书52页已经说明,下文具体说到对象转换为原始值的步骤
}
}
复制代码
综合上文所说,[]=='' 属于最后一种状况.数组
直接将对象转成true
复制代码
if(对象具备tostring()方法){
若是返回一个原始值,javascript将这个值转换为字符串,并返回这个字符串结果。
}else if(对象具备valueOf()方法){
会调用valueOf()方法.将其结果返回
}else{
抛出异常
}
复制代码
if(对象具备valueOf()方法){
会调用valueOf()方法.将其结果返回
}else if(对象具备tostring()方法){
若是返回一个原始值,javascript将这个值转换为字符串,并返回这个字符串结果。
}else{
抛出异常
}
复制代码
注意对于空数组以及单个元素的数组会转换成一个数字。数组继承了默认的valueOf()方法,这个方法返回一个对象而不是一个原始值,所以数组到数字的转换则调用toString()方法。空数组转换成为空字符串,空字符串转换成为数字0.——来自《javascript权威指南》第55页。bash
上图的意思是ui
if (两个值类型不相同){
return false;
}
else if(null/undefined/true/false){
return true
}else if(两个值其中之一为NaN){
return false;
}else if(两个值都为数值且值相等){
return true;
}else if(两个值都为字符串且值相等 ){
return true;
}else if(两个值都指向同一个引用类型 ){
return true;
}
复制代码
123 == 123; //true
'123' == 123; //true,'123'会转成成数值123
false == 0; //true,false 转成数值就是0
'a' == 'A'; //false,转换后的编码不同
123 == {}; //false,valueOf()会改变
123 == NaN; //false,只要有NaN,都是false
{} == {}; //false,比较的是他们的地址,每一个新建立对象的引用地址都不一样
null == undefined //true
'NaN' == NaN //false
123 == NaN //false
NaN == NaN //false
false == 0 //true
true == 1 //true
true == 2 //false
undefined == 0 //false
null == 0 //false
'123' == 123 //true
'123' === 123 //false
复制代码
《javascript权威指南》编码