symbol 是es6中新增的一種資料型別,是唯一的識別符號,可以作為物件的唯一屬性名;
symbol 可以代替乙個常量,指的常量的值唯一;
symbol 的特點:
唯一性:即使兩個變數型別,值都一樣,也不相等;
let id1 =
symbol
('id');
let id2 =
symbol
('id');
console.
log(id1 == id2)
;//false
隱藏性: 用 標識的symbol型別作為物件的屬性的時候,不能被for in 訪問
let id =
symbol
("id");
let obj =
;for
(let option in obj)
但是也可以通過方法訪問:object.getownpropertysymbols
let id =
symbol
("id");
let obj =
;let array = object.
getownpropertysymbols
(obj)
; console.
log(array)
;//[symbol(id)]
console.
log(obj[array[0]
]);//'symbol'
雖然這樣保證了symbol的唯一性,但我們不排除希望能夠多次使用同乙個symbol值的情況。
為此,官方提供了全域性註冊並登記的方法:symbol.for()
let name1 = symbol.
for(
'name');
//檢測到未建立後新建
let name2 = symbol.
for(
'name');
//檢測到已建立後返回
console.
log(name1 === name2)
;// true
通過symbol.keyfor() 獲取引數值
let name1 = symbol.
for(
'name');
let name2 = symbol.
for(
'name');
console.
log(symbol.
keyfor
(name1));
// 'name'
console.
log(symbol.
keyfor
(name2));
// 'name'
ES6 新增Symbol資料型別
1 symbol 是原始資料型別,不是物件。不能用 new 命令。可以接受乙個字串作為引數,為新建立的 symbol 提供描述。let sy symbol kk console.log sy symbol kk typeof sy symbol 注意相同引數 symbol 返回的值不相等 let s...
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...