對的你沒看錯,這是道很基礎的面試題,昨天恰好面試到了,沒答上出來。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權威指南》編碼