JavaScript資料型別

GodGump發表於2020-10-20

一、JavaScript資料型別

值型別(基本型別):字串(String)、數字(Number)、布林(Boolean)、對空(Null)、未定義(Undefined)、Symbol。

  • string(字串)
  • number(數字)
  • boolean(布林值)
  • null(空值)
  • undefined(未定義)
  • symbol(符號)
引用資料型別:物件(Object)、陣列(Array)、函式(Function)。
  • Object(物件)
  • Array(陣列)
  • Function(函式)

注:Symbol 是 ES6 引入了一種新的原始資料型別,表示獨一無二的值。


JavaScript資料型別

注:為什麼 typeof 運算子對於 null 值會返回 "Object"。這實際上是 JavaScript 最初實現中的一個錯誤,然後被 ECMAScript 沿用了。現在,null 被認為是物件的佔位符,從而解釋了這一矛盾,但從技術上來說,它仍然是原始值。

二、為什麼0.1+0.2不等於0.3?

JavaScript資料型別
我們都知道,計算機用位來儲存及處理資料。每一個二進位制數(二進位制串)都一一對應一個十進位制數。

所以0.1的二進位制是
JavaScript資料型別
導致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表示”缺少值”,就是此處應該有一個值,但是還沒有定義。典型用法是:

  1. 變數被宣告瞭,但沒有賦值時,就等於undefined。
  2. 呼叫函式時,應該提供的引數沒有提供,該引數等於undefined。
  3. 物件沒有賦值的屬性,該屬性的值為undefined。
  4. 函式沒有返回值時,預設返回undefined。
null表示”沒有物件”,即該處不應該有值。典型用法是:
  1. 作為函式的引數,表示該函式的引數不是物件。
  2. 作為物件原型鏈的終點。

相關文章