1. 程式人生 > >Javascript 中關於if(xx)和 x==y的判斷

Javascript 中關於if(xx)和 x==y的判斷

轉化 onu 方法 IV 技術分享 很多 布爾 空字符串 top

Javascript 中關於if(xx)和 x==y的判斷是非常基礎但卻十分重要的內容,以下是筆者學習的一些總結:

1、if(xx)的判斷:

在if(xx)的判斷中,括號裏的內容會強制轉換會布爾類型,結果為true則後面語句執行,為false則不執行。在此註意一條就可以了:對於括號裏的表達式,會被強制轉換為布爾類型.

如何強制轉換呢?規則如下:

技術分享圖片

舉幾個栗子,如下代碼輸出什麽?

A:

if ("hello") {

console.log("hello")

}

括號裏的字符串會強制轉換為布爾類型,結果為true,後面語句執行,結果輸出hello.

B: if ("") {

console.log(‘empty‘)

}

括號裏是個空字符串,轉換為false,後面語句不執行。

C: if (" ") {

console.log(‘blank‘)

}

括號裏像一個空字符串,但其實不是,它裏面有空格,所以它是空白字符串,轉換為true,後面語句執行,結果輸出blank。

D:

if ([0]) {

console.log(‘array‘)

}

括號裏是個對象,轉換為true,後面語句執行,結果輸出array。

E:

if (‘0.00‘) {

console.log(‘0.00‘)

}

括號裏是字符串,轉換為true,後面語句執行,結果輸出0.00

2、a==b的判斷

首先,我們知道:

JS中的值有兩種類型:原始類型(Primitive)、對象類型(Object)。

基本類型包括:Undefined、Null、Boolean、Number和String等五種。

Undefined類型和Null類型的都只有一個值,即undefined和null;Boolean類型有兩個值:true和false;Number類型的值有很多很多;String類型的值理論上有無數個。

所有對象都有valueOf()和toString()方法,它們繼承自Object,當然也可能被子類重寫。

表達式: X == Y

其中X和Y是上述六種類型中某一種類型的值,當X和Y的類型相同時,X==Y可以轉化為X===Y。

其他類型情況就多了,以圖來說明:

技術分享圖片

技術分享圖片

圖1中,

當布爾值與其他類型的值作比較時,布爾值會轉化為數字

true -> 1 false -> 0
N表示ToNumber操作,即將操作數轉為數字。

技術分享圖片

P表示ToPrimitive操作,即將操作數轉為原始類型的值。對於 Object 類型,先嘗試調用 .valueOf 方法獲取結果。

如果沒定義,再嘗試調用 .toString方法獲取結果

我們把Undefined和Null用不確定的、沒有的或者空的部分來描述,把Boolean、Number、String和Object用存在的、確實

的、有和非空的部分來描述。 那這兩個部分中的任何值做==運算,結果當然都是false。 undefined和null同屬於一個部分,

它們做= =運算自然為true. 所以undefined == null,結果是true。且它倆與所有其他值比較的結果都是false。

可以看出在類型轉換的過程中,有向數字number轉換的方向:

String == Boolean,需要兩個操作數同時轉為Number。

String/Boolean == Number,需要String/Boolean轉為Number。

Object == Primitive,需要Object轉為Primitive(具體通過valueOf和toString方法)

暫時先寫到這裏了,有點粗糙,以後復習時再加工,有不對之處歡迎批評指正。

Javascript 中關於if(xx)和 x==y的判斷