一、JavaScript資料型別
值型別(基本型別):字串(String)、數字(Number)、布林(Boolean)、對空(Null)、未定義(Undefined)、Symbol。
string
(字串)number
(數字)boolean
(布林值)null
(空值)undefined
(未定義)symbol
(符號)
Object
(物件)Array
(陣列)Function
(函式)
注:Symbol 是 ES6 引入了一種新的原始資料型別,表示獨一無二的值。
注:為什麼 typeof 運算子對於 null 值會返回 "Object"。這實際上是 JavaScript 最初實現中的一個錯誤,然後被 ECMAScript 沿用了。現在,null 被認為是物件的佔位符,從而解釋了這一矛盾,但從技術上來說,它仍然是原始值。
二、為什麼0.1+0.2不等於0.3?
我們都知道,計算機用位來儲存及處理資料。每一個二進位制數(二進位制串)都一一對應一個十進位制數。
所以0.1的二進位制是
導致0.1在計算機內部根本就不是精確的0.1
那0.1 + 0.1 為什麼等於0.2?
答案是:兩個有舍入誤差的值在求和時,相互抵消了,但這種“負負得正,相互抵消”不一定是可靠的,當這兩個數字是用不同長度數位來表示的浮點數時,舍入誤差可能不會相互抵消。
又如,對於 0.1 + 0.3 ,結果其實並不是0.4,但0.4是最接近真實結果的數,比其它任何浮點數都更接近。許多語言也就直接顯示結果為0.4了,而不展示一個浮點數的真實結果了。
注:二進位制能精確地表示位數有限且分母是2的倍數的小數(1/2+1/2),比如0.5,0.5在計算機內部就沒有舍入誤差。所以0.5 + 0.5 === 1
三、資料型別轉換
用法 | 結果 |
---|---|
Number(false) | 0 |
Number(true) | 1 |
Number(undefined) | NaN |
Number(null) | 0 |
Number("1.2") | 1.2 |
Number("12") | 12 |
Number("1.2.3") | NaN |
Number(new object()) | NaN |
Number(50) | 50 |
四、null和undefined的區別
var a = undefined;
var a = null;
null是一個表示”無”的物件轉為數值時為0;undefined是一個表示”無”的原始值,轉為數值時為NaN。
當宣告的變數還未被初始化時,變數的預設值為undefined。
null用來表示尚未存在的物件,常用來表示函式企圖返回一個不存在的物件。
undefined表示”缺少值”,就是此處應該有一個值,但是還沒有定義。典型用法是:
- 變數被宣告瞭,但沒有賦值時,就等於undefined。
- 呼叫函式時,應該提供的引數沒有提供,該引數等於undefined。
- 物件沒有賦值的屬性,該屬性的值為undefined。
- 函式沒有返回值時,預設返回undefined。
- 作為函式的引數,表示該函式的引數不是物件。
- 作為物件原型鏈的終點。