https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness
ps: 這個(gè)部分感覺真的很奇葩
part one 關(guān)于== 與 ===
嚴(yán)格相等 ===:
在日常中使用全等操作符幾乎總是正確的選擇。全等操作符比較兩個(gè)值是否相等,兩個(gè)被比較的值在比較前都不進(jìn)行隱式轉(zhuǎn)換。如果兩個(gè)被比較的值具有不同的類型,這兩個(gè)值是不全等的。否則,如果兩個(gè)被比較的值類型相同,值也相同,并且都不是 number 類型時(shí),兩個(gè)值全等。最后,如果兩個(gè)值都是 number 類型,當(dāng)兩個(gè)都不是 NaN,并且數(shù)值相同,或是兩個(gè)值分別為 +0 和 -0 時(shí),兩個(gè)值被認(rèn)為是全等的。
var num = 0;
var obj = new String("0");
var str = "0";
var b = false;
console.log(num === num); // true
console.log(obj === obj); // true
console.log(str === str); // true
console.log(num === obj); // false
console.log(num === str); // false
console.log(obj === str); // false
console.log(null === undefined); // false
console.log(obj === null); // false
console.log(obj === undefined); // false
非嚴(yán)格相等 ==
相等操作符比較兩個(gè)值是否相等,在比較前將兩個(gè)被比較的值轉(zhuǎn)換為相同類型。在轉(zhuǎn)換后(等式的一邊或兩邊都可能被轉(zhuǎn)換),最終的比較方式等同于全等操作符 === 的比較方式。 相等操作符滿足交換律。

一般而言,根據(jù) ECMAScript 規(guī)范,所有的對(duì)象都與 undefined 和 null 不相等。
var num = 0;
var obj = new String("0");
var str = "0";
var b = false;
console.log(num == num); // true
console.log(obj == obj); // true
console.log(str == str); // true
console.log(num == obj); // true
console.log(num == str); // true
console.log(obj == str); // true
console.log(null == undefined); // true
// both false, except in rare cases
console.log(obj == null);
console.log(obj == undefined);
part two 關(guān)于if的判斷
基本:對(duì)于括號(hào)里的表達(dá)式,會(huì)被強(qiáng)制轉(zhuǎn)換為布爾類型
先上原理

// 題目1:如下代碼輸出什么?
if ("hello") {
console.log("hello")
}
output: hello/ 非空字符串條件為真
// 題目2:如下代碼輸出什么?
if ("") {
console.log('empty')
}
if 語句不執(zhí)行,空字符串為false
// 題目3:如下代碼輸出什么?
if (" ") {
console.log('blank')
}
同題目一,非空字符串為真。
// 題目4:如下代碼輸出什么?
if ([0]) {
console.log('array')
}
數(shù)組為object,為真,
if('0.00'){
console.log('0.00')
}
非空字符串,為真。
part three == 的判斷

對(duì)于數(shù)字來說 0 就是false,
"" == 0 //題目1
兩邊都是false,因此結(jié)果為true
" " == 0 //題目2
空白字符轉(zhuǎn)換(tonumber)后為0, 結(jié)果為true
"" == true //題目3
結(jié)果false,空字符串為false
"" == false //題目4
結(jié)果為true 理由同上
" " == true //題目5
結(jié)果為false,同題目2
!" " == true //題目6
除了空字符串為false;其他都為true,true取反為false
!" " == false //題目7
同上
"hello" == true //題目8
hello轉(zhuǎn)換為數(shù)字為NAN,因此不為true
"hello" == false //題目9
hello轉(zhuǎn)換為數(shù)字為NAN,因此也不為false
"0" == true //題目10
"0"轉(zhuǎn)換成數(shù)字為0,因此為false
"0" == false //題目11
為true
"00" == false //題目12
為true
"0.00" == false //題目13
為true
undefined == null //題目14
結(jié)果為true; 死記硬背把
{} == true //題目15
結(jié)果為false,里面無tovalue 只是一個(gè)空的字符串
[] == true //題目16
同上,空數(shù)組。
var obj = {
a: 0,
valueOf: function(){return 1}
}
valueof 得到1,就拿1和這些判斷
obj == "[object Object]" //題目17
false,1!= "[object Object]"
obj == 1 //題目18
true
obj == true //題目19
true
總結(jié): 估計(jì)也只能面試筆試的時(shí)候用的上了,實(shí)際工作中估計(jì)難得用上