if 語句
if (condition) statement1 else statement2
這里的condition可以是任意表達(dá)式,表達(dá)式求值后, js會(huì)自動(dòng)將此值(這個(gè)值可以不是布爾值) 轉(zhuǎn)換為布爾值
-
關(guān)于這個(gè)如何將這個(gè)值轉(zhuǎn)換為布爾值遵循以下規(guī)則:
數(shù)據(jù)類型 轉(zhuǎn)換為true的值 轉(zhuǎn)換為false的值 Boolean true false String 非空字符串 "" Number 任何非0的數(shù)字值(包括無窮大) 0和NaN Object 任何對(duì)象 null Undefined n/a undefined var a = "0"; if (a) { console.log("我是灰太狼") } else { console.log("我是喜洋洋") } /*輸出 我是灰太狼*/
這里的"0" 不是空字符串,是一個(gè)值為0 的字符串
var a = 0; if (a) { console.log("我是灰太狼") } else { console.log("我是喜洋洋") } /*輸出 我是喜洋洋*/
這里的0 是一個(gè)值為0 的number ,轉(zhuǎn)換為布爾值時(shí)是false.所以執(zhí)行else里的內(nèi)容
if(" "){ console.log("hello world") } else { console.log("haha") } /* 輸出 "hello world" */
空白字符串在轉(zhuǎn)換為布爾值時(shí)是true,所以輸出"hello world"
if(""){ console.log("hello world") } else { console.log("haha") } /* 輸出 haha */
空字符串在轉(zhuǎn)換為布爾值時(shí)為FALSE
var a = 1; if(a = 2){ console.log("hello world") } console.log(a) /* 輸出 "hello world" 2 */
這里的if ( ) 里的是賦值語句挤悉,故為TRUE,且a 的值改變了
var a = 1; if(a == 2){ console.log("hello world") } console.log(a) /* 輸出 1 */
if ( ) 里的判斷語句是 "相等"判斷巫湘,number不相等装悲,故為FALSE,只輸出1
var a = "2"; if(a == 2){ console.log("hello world") } console.log(a) /* 輸出 "hello world" "2" */
if ( ) 里的判斷語句是 "相等"判斷尚氛,會(huì)進(jìn)行類型轉(zhuǎn)換式的比較诀诊,故也為TRUE
var a = "2"; if(a === 2){ console.log("hello world") } console.log(a) /* "2" */
這里是進(jìn)行全等判斷,所以類型和值有一個(gè)不相等阅嘶,即為FALSE
相等 == 判斷
相等 ==
在比較操作數(shù)時(shí)通常會(huì)進(jìn)行“強(qiáng)制類型轉(zhuǎn)換”在進(jìn)行比較
轉(zhuǎn)換規(guī)則是盡量往數(shù)值上轉(zhuǎn)換(一般體現(xiàn)在兩邊操作數(shù)類型不同時(shí)属瓣,對(duì)象和NaN見下面),具體遵循以下規(guī)則:
其中一個(gè)操作數(shù)是布爾值的話讯柔,將布爾值轉(zhuǎn)換為數(shù)值抡蛙,true為1 , false 為 0
如果有一個(gè)字符串,另一個(gè)操作數(shù)是數(shù)字魂迄,將字符串轉(zhuǎn)換為數(shù)值粗截,字符串" 2" 轉(zhuǎn)換為 2, 字符串"a" 轉(zhuǎn)換為 NaN
如果有一個(gè)操作數(shù)是對(duì)象捣炬,調(diào)用其valueOf()方法(此方法返回對(duì)象的字符串熊昌、數(shù)值或布爾值表示,通常與toString()方法返回值相同)湿酸,再依照上面所述進(jìn)行基本類型轉(zhuǎn)換
(各對(duì)象valueOf()方法返回類型值)
對(duì)象 | 返回值 |
---|---|
Array | 返回?cái)?shù)組對(duì)象本身 |
Boolean | 布爾值 |
Date | 存儲(chǔ)的時(shí)間是從 1970 年 1 月 1 日午夜開始計(jì)的毫秒數(shù) UTC |
Function | 函數(shù)本身 |
Number | 數(shù)字值 |
Object | 對(duì)象本身,這是默認(rèn)情況 |
String | 字符串值 |
Math 和 Error | 沒有 valueOf 方法 |
null 和 defined 相等
如果有一個(gè)操作數(shù)時(shí)NaN婿屹,則返回false
NaN與NaN是不相等的
如果操作數(shù)均是對(duì)象,如果指向同一個(gè)對(duì)象則相等(指的是保存對(duì)象的地址相同的變量)推溃,這種
{} == {}
是不相等的昂利。
所以一般是使用 ===
來進(jìn)行判斷