ES6 新增Symbol資料型別

2021-10-04 07:44:20 字數 1458 閱讀 9136

1、 symbol 是原始資料型別,不是物件。不能用 new 命令。可以接受乙個字串作為引數,為新建立的 symbol 提供描述。

let sy = symbol("kk");

console.log(sy); // symbol(kk)

typeof(sy); // "symbol"

// 注意相同引數 symbol() 返回的值不相等

let sy1 = symbol("kk");

sy === sy1; // false

由於每乙個 symbol 的值都是不相等的,所以 symbol 作為物件的屬性名,可以保證屬性不重名。

let sy = symbol("key1");

// 寫法1

let syobject = {};

syobject[sy] = "kk";

console.log(syobject); //

// 寫法2

let syobject = ;

console.log(syobject); //

// 寫法3

let syobject = {};

object.defineproperty(syobject, sy, );

console.log(syobject); //

symbol 作為物件屬性名時不能用.運算子,要用方括號。因為.運算子後面是字串,所以取到的是字串 sy 屬性,而不是 symbol 值 sy 屬性。

注意!!!

symbol 值作為屬性名時,該屬性是公有屬性不是私有屬性,可以在類的外部訪問。但是不會出現在 for...in 、 for...of 的迴圈中,也不會被 object.keys() 、 object.getownpropertynames() 返回。如果要讀取到乙個物件的 symbol 屬性,可以通過 object.getownpropertysymbols() 和 reflect.ownkeys() 取到。

let sy = symbol("key1");

let syobject = {};

syobject[sy] = "kk";

console.log(syobject);

for (let i in syobject) // 無輸出

object.keys(syobject); //

object.getownpropertysymbols(syobject); // [symbol(key1)]

reflect.ownkeys(syobject); // [symbol(key1)]

es6 新增的資料型別 symbol

應用場景 es5的物件屬性名都是字串,容易造成屬性名衝突 es6引入新的原始資料型別symbol,表示獨一無二的值 物件屬性名可以有兩種型別 1.字串 2.symbol型別 獨一無二,不會與其他屬性名產生衝突 描述 物件屬性名的問題 只會顯示lucy的名字 obj.name bob obj.name...

ES6新增的symbol資料型別

1 symbol的概念 在es5中,物件屬性名都是字串容易造成屬性名衝突。為了避免這種情況的發生,es6引入了一種新的原始資料型別symbol,表示獨一無二的值。symbol 函式返回的是 symbol 型別的值,該型別具有靜態方法和靜態屬性。let sy1 symbol winne let sy2...

es6 新增資料型別Symbol

es6在string number boolean null undefined object之外又新增了一種symbol型別。symbol意思是符號,有乙個特性 每次建立乙個symbol值都是不一樣的。symbol是程式建立並且可以用作屬性鍵的值,並且它能避免命名衝突的風險。var a new s...