if語句
if語句是編程語言最常用的語句胯陋,語法
if(condition){
//true statement
}else {
//false statement
}
其中condition
可以是任意表達(dá)式,結(jié)果不一定是布爾值袱箱,JavaScript解釋器會(huì)自動(dòng)調(diào)用Boolean()
將表達(dá)式結(jié)果轉(zhuǎn)為布爾值遏乔,如果表達(dá)式為真,執(zhí)行第一個(gè)代碼塊內(nèi)語句犯眠,如果為假按灶,執(zhí)行第二個(gè)代碼塊內(nèi)語句。
例如:
var a = 3筐咧;
if(a === 1){
console.log('ok')
}else{
console.log('not ok')
}//輸出結(jié)果為not ok
當(dāng)轉(zhuǎn)換成boolean類型時(shí)遵循下列規(guī)則:
- 如果表達(dá)式的值是一個(gè)對(duì)象鸯旁,返回true
- 如果表達(dá)式的值是一個(gè)空字符串,返回false
- 如果表達(dá)式的值是一個(gè)非空字符串量蕊,返回true
- 如果表達(dá)式的值是數(shù)值0铺罢,或NaN,返回false
- 如果表達(dá)式的值是任意非零數(shù)值(包括Infinity)残炮,返回true
- 如果表達(dá)式的值是null韭赘,返回false
- 如果表達(dá)式的值是undefined,返回false
示例:
/* 字符串 */
if ("hello") {
console.log("true");
} // true
if ("") {
console.log("true");
} // true
if (" ") {
console.log("true");
} // true
if ("0.00") {
console.log("true");
} // true
/* 數(shù)值 */
if (0.00) {
console.log("true");
} // false
/* 對(duì)象 */
if ({}) {
console.log("true");
} // true
if ([]) {
console.log("true");
} // true
a==b相等運(yùn)算符
相等運(yùn)算符用來比較相同類型的數(shù)據(jù)時(shí)势就,與嚴(yán)格相等運(yùn)算符完全一樣泉瞻。
比較不同類型的數(shù)據(jù)時(shí)脉漏,相等運(yùn)算符會(huì)先將數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,然后再用嚴(yán)格相等運(yùn)算符比較袖牙。類型轉(zhuǎn)換規(guī)則如下:
(1)原始類型的值
原始類型的數(shù)據(jù)會(huì)轉(zhuǎn)換成數(shù)值類型再進(jìn)行比較侧巨。
1 == true // true
// 等同于 1 === Number(true)
0 == false // true
// 等同于 0 === Number(false)
2 == true // false
// 等同于 2 === Number(true)
2 == false // false
// 等同于 2 === Number(false)
'true' == true // false
// 等同于 Number('true') === Number(true)
// 等同于 NaN === 1
'' == 0 // true
// 等同于 Number('') === 0
// 等同于 0 === 0
'' == false // true
// 等同于 Number('') === Number(false)
// 等同于 0 === 0
'1' == true // true
// 等同于 Number('1') === Number(true)
// 等同于 1 === 1
'\n 123 \t' == 123 // true
// 因?yàn)樽址D(zhuǎn)為數(shù)字時(shí),省略前置和后置的空格
上面代碼將字符串和布爾值都轉(zhuǎn)為數(shù)值鞭达,然后再進(jìn)行比較司忱。
(2)對(duì)象與原始類型值比較
對(duì)象(這里指廣義的對(duì)象,包括數(shù)組和函數(shù))與原始類型的值比較時(shí)畴蹭,對(duì)象轉(zhuǎn)化成原始類型的值坦仍,再進(jìn)行比較。
[1] == 1 // true
// 等同于 Number([1]) == 1
[1] == '1' // true
// 等同于 Number([1]) == Number('1')
[1] == true // true
// 等同于 Number([1]) == Number(true)
上面代碼中叨襟,數(shù)組[1]
與數(shù)值進(jìn)行比較繁扎,會(huì)先轉(zhuǎn)成數(shù)值,再進(jìn)行比較糊闽;與字符串進(jìn)行比較锻离,會(huì)先轉(zhuǎn)成數(shù)值,然后再與字符串進(jìn)行比較墓怀,這時(shí)字符串也會(huì)轉(zhuǎn)成數(shù)值;與布爾值進(jìn)行比較卫键,兩個(gè)運(yùn)算子都會(huì)先轉(zhuǎn)成數(shù)值傀履,然后再進(jìn)行比較。
(3)undefined 和 null
undefined
和null
與其他類型的值比較時(shí)莉炉,結(jié)果都為false
钓账,它們互相比較時(shí)結(jié)果為true
。
false == null // false
false == undefined // false
0 == null // false
0 == undefined // false
undefined == null // true
絕大多數(shù)情況下絮宁,對(duì)象與undefined
和null
比較梆暮,都返回false
。只有在對(duì)象轉(zhuǎn)為原始值得到undefined
時(shí)绍昂,才會(huì)返回true
啦粹,這種情況是非常罕見的。