part one 關(guān)于== 與 ===
嚴(yán)格相等 ===:
在日常中使用全等操作符幾乎總是正確的選擇垢夹。全等操作符比較兩個(gè)值是否相等榆苞,兩個(gè)被比較的值在比較前都不進(jìn)行隱式轉(zhuǎn)換和悦。如果兩個(gè)被比較的值具有不同的類(lèi)型赞哗,這兩個(gè)值是不全等的牌里。否則融柬,如果兩個(gè)被比較的值類(lèi)型相同死嗦,值也相同,并且都不是 number 類(lèi)型時(shí)粒氧,兩個(gè)值全等越除。最后,如果兩個(gè)值都是 number 類(lèi)型,當(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)換為相同類(lèi)型。在轉(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)換為布爾類(lèi)型
先上原理
// 題目1:如下代碼輸出什么?
if ("hello") {
console.log("hello")
}
output: hello/ 非空字符串條件為真
// 題目2:如下代碼輸出什么?
if ("") {
console.log('empty')
}
if 語(yǔ)句不執(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ù)字來(lái)說(shuō) 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,里面無(wú)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ì)難得用上