標籤:efi 重寫 種類 array 運算 說明 string width 理論
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‘)
}
括弧裡是個Null 字元串,轉換為false,後面語句不執行。
C: if (" ") {
console.log(‘blank‘)
}
括弧裡像一個Null 字元串,但其實不是,它裡面有空格,所以它是空白字串,轉換為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的判斷