Skip to content

Latest commit

 

History

History
89 lines (70 loc) · 2.27 KB

14.md

File metadata and controls

89 lines (70 loc) · 2.27 KB

Javascript primitive type

Javascript 裡面定義的 primitive type 有六種,分別為string、number、boolean、 undefined、symbol、bigint


undefined

表示還不存在,這是 javascript 給所有變數的初始值,直到你給定變數一個值。跟 null 不同。null 是已經賦予一個值,只是那個值是是 null,就是變數沒有值的意思 當要把變數設定為空值,可以使用 null。


symbol

ES6 之後引入了 symbol,用來表示獨一無二的值。在 ES5,若要幫 object 添加新的 property,則只能使用 string,這時很容易產生衝突,而 symbol 可以解決這件事情,也就是說,object property name 現在可以有兩種型態 - 字串和 Symbol。

const s1 = Symbol();
typeof s1; // "symbol"
const s2 = Symbol();
s1 === s2; // false

Symbol() 是一個函數,不是 constructor,你不能 new 它:

const s = new Symbol(); // TypeError: Symbol is not a constructor

Symbol 函數也可以接受一個字串參數,來對該 Symbol 物件命名,主要是為了在 console 顯示,或轉型成字串時,方便區分不同的 Symbol

const s1 = Symbol('foo');
const s2 = Symbol('bar');
s1; // Symbol(foo)
s2; // Symbol(bar)
s1.toString(); // "Symbol(foo)"
s2.toString(); // "Symbol(bar)"

const s3 = Symbol('foo'); // 建立一個和 s1 同名的 s3
s1 === s3; // false 雖然同名,但 s1 和 s3 還是不一樣的值

Symbol 當作 object properties

const mySymbol = Symbol();
const a = {
    [mySymbol]: 'Hello!'
};
a[mySymbol]; // Hello

因為因為 symbol 可以賦予獨一無二的值,也常常用來做 Enum。


BigInt

number 在 javascript 裡面他的最大值為 2^53 - 1;

const max = Number.MAX_SAFE_INTEGER; // 9007199254740991

如果我們把他 + 1

const max = Number.MAX_SAFE_INTEGER + 1; // 9007199254740992

把他 + 2

const max = Number.MAX_SAFE_INTEGER + 2; // 9007199254740992, 錯誤產生了

這時候就可以透過 BigInt 來解決這件事情

BigInt(Number.MAX_SAFE_INTEGER) + 2n; //9_007_199_254_740_993n

特性

typeof 123; // 'number'
typeof 123n; //'bigint'

42n === BigInt(42); // true
42n == 42; // true

1 + 1n // Error

BigInt(0.1) // Error 因為他不是整數

tags: Javascript