ES6特性 資料型別Symbol

2021-10-10 00:14:27 字數 2357 閱讀 6549

es6新加入了一種原始資料型別symbol,表示獨一無二的值,這是js的第七種資料型別,前六種是:undefined、null、布林值(boolean)、字串(string)、數值(number)、物件(object)。

因此,物件的屬性名現在可以有兩種型別,一種是原來就有的字串,另一種就是新增的symbol型別。凡是屬性名屬於symbol型別,就都是獨一無二的,可以保證不會與其他屬性名產生衝突。

//symbol值通過symbol函式生成。

let s =

symbol()

;typeof s// "symbol"

//symbol函式前不能使用new命令,否則會報錯。

//這是因為生成的symbol是乙個原始型別的值,不是物件,所以不能新增屬性。

//基本上,它是一種類似於字串的原始資料型別。

//既然是獨一無二的,那麼我們試試兩個symbol()相等嗎?

let s1 =

symbol()

let s2 =

symbol()

console.

log(s1)

console.

log(s2)

console.

log(s1 === s2)

// false

//symbol函式可以接受乙個字串作為引數,表示對symbol例項的描述

//主要是為了在控制台顯示,或者轉為字串時,比較容易區分。

//這個引數只是表示對當前symbol值的描述,因此相同引數的symbol函式的返回值是不同的symbol例項。

let s1 =

symbol

('fun'

)let s2 =

symbol

('fun'

)console.

log(s1)

console.

log(s2)

console.

log(s1 === s2)

// false

作為屬性名由於每乙個 symbol 值都是不相等的,這意味著 symbol 值可以作為識別符號,用於物件的屬性名,就能保證不會出現同名的屬性。這對於乙個物件由多個模組構成的情況非常有用,能防止某乙個鍵被不小心改寫或覆蓋。

應用場景

比如在乙個班級中,可能會有同學名字相同的情況,這時候使用物件來描述學生資訊的時候,如果直接使用學生姓名作為key會有問題。

//普通的物件

const grade =

, 李四:

, 李四:,}

console.

log(grade)

// 只會保留最後乙個'李四'

//如果使用symbol,同名的學生資訊就不會被覆蓋:

const stu1 =

symbol

('李四'

)const stu2 =

symbol

('李四'

)const grade =

,[stu2]:,

}console.

log(grade)

//​//symbol(李四): object

​//symbol(李四): object

//symbol作為屬性名,該屬性不會出現在for...in、for...of迴圈中,

//也不會被object.keys()、object.getownpropertynames()返回。

//但是,它也不是私有屬性,有乙個object.getownpropertysymbols方法,可以獲取指定物件的所有symbol屬性名。

方法返回乙個陣列,成員是當前物件的所有用作屬性名的symbol值。

let obj =

;let a =

symbol

('a');

let b =

symbol

('b');

obj[a]

='hello'

;obj[b]

='world'

;const objectsymbols = object.

getownpropertysymbols

(obj)

;

ES6 資料型別Symbol

1 symbol 定義的屬性,一般方法獲取不到 2 let name symbol 3 let obj 4 name 123 5 name 456 6 獲取symbol元素object.getownpropertysymbols 7object.getownpropertysymbols obj 8...

ES6新資料型別 Symbol

我們都知道es5 為我們提供了六種資料型別。分別是 物件 object 數字型別 number 布林型別 boolean 字串型別 string 空型別 null 未定義型別 undefind e6又為我們增加了一種型別 symbol 型別,他表示獨一無二的值。這樣下來js 就有七種資料型別了。一 ...

ES6 新增Symbol資料型別

1 symbol 是原始資料型別,不是物件。不能用 new 命令。可以接受乙個字串作為引數,為新建立的 symbol 提供描述。let sy symbol kk console.log sy symbol kk typeof sy symbol 注意相同引數 symbol 返回的值不相等 let s...