Boolean數據類型
Boolean數據類型是我們最常用的數據類型,主要用於if語句的條件判斷。Boolean有兩個值:true和false。這兩個值與數值不同,因此true並不等於,false也並不等於0。但是我們可以用Number()函數將true轉換成數字1,false轉換成數字0。我們可以將true和false作為變量的初始值,賦值給變量。
let ble=true;
let abe=false;
true和false區分大小寫,所以True和False是有效的標識符,不是布爾值。
我們可以調用Boolean()函數將所有的數據類型轉換成布爾值,轉換規則如下
理解和掌握上面的轉換規則非常重要,控制流程語句(如if)會自動執行上面的轉換。
let message="hello word!"
if(message){
console.log(message);
}
在上面的代碼中,變量message作為if語句的判斷條件,如果message為true,也就是message轉換為true時,則執行if語句中的console.log(message)代碼。所有的轉換都是自動的。
Number中的浮點
Number數據類型由整數和浮點數組成,浮點數就是我們就是小數。注意,這裡的小數包括含小數點的整數,如1.,以及含小數0的整數,例如1.0。同時浮點數的整數部分為,可以省略0,。所以0.1可以寫為.1。當然不推薦這種寫法。
浮點數也可以使用科學計數法表示,至於什麼是科學計數法,這屬於初中的代數知識,這裡不做討論。
這裡我們用e代替10,例如0.1表示為1e-1,用科學計數法表示為1*10^-1,也就就是1乘以10的負一次方。
浮點數的不精確計算
現在請思考下面代碼的執行結果。
console.log(0.1+0.2)
很多人的第一反應是0.3,但是其結果是0.30000000000000004。那麼0.3後面的0000000000000004是怎麼來的呢?這就是浮點數的不精確計算。
這和10/3結果是無限循環小數3.33是一個道理。我們知道整整數系統中,可以保證10的整數次冪作為除數才能正常用作。同樣的,在二進位數字系統中,以2的整數次冪作為除數才能正常工作,所以1/10在二進位數字系統中就變成了無限循環小數。
就像整數數字系統中沒有辦法將1/10存儲為小數一樣,在二進位數字系統中也無法精確地存儲0.1或0.2。但是如果我們在實際上火中遇到了這個問題,我們可以使用方法toFixed(n),四捨五入保留n位小數。
let num=0.1+0.2;
console.log(num.toFixed(2));
toFixed()總是返回一個字符串,所以我們可以一元加號將其返回的值強制轉換成數字。
let num=0.1+0.2;
console.log(+num.toFixed(2));
當然我們建議永遠不要計算0.1+0.2這樣的特定的浮點值。即使使用到,建議用其他方式代指這兩個數字。