在es5中 物件屬性名都是字串,這容易造成屬性名的衝突,比如,你使用了乙個他人提供的物件,但又想為這個物件新增新的方法(mixin 模式),新方法的名字就有可能與現有方法產生衝突,於是 es6 引入了symbol。symbol是一種新的原始資料型別,表示獨一無二的值。它是繼undefined
、null
、布林值(boolean)、字串(string)、數值(number)、物件(object)六種資料型別之後的第七種資料型別。凡是屬性名屬於 symbol 型別,就都是獨一無二的,可以保證不會與其他屬性名產生衝突。
1.宣告symbol
symbol
函式可以接受乙個字串作為引數,表示對 symbol 例項的描述,主要是為了在控制台顯示,或者轉為字串時,比較容易區分。
var f= symbol();//symbol()
var f= symbol('foo');//symbol(foo)
//沒有引數的情況
let s1 =symbol();
let s2 =symbol();
s1 === s2 //
false
//有引數的情況
let s1 = symbol('foo');
let s2 = symbol('foo');
s1 === s2 //
false
注意,symbol
函式的引數只是表示對當前 symbol 值的描述,因此相同引數的symbol
函式的返回值是不相等的。
s1
和s2
都是symbol
函式的返回值,而且引數相同,但是它們是不相等的。
2.symbol在物件中的應用
symbol作為屬性名:
let mysymbol =symbol();//第一種寫法
let a ={};
a[mysymbol] = 'hello!';
//第二種寫法
let a =;
//第三種寫法
let a ={};
object.defineproperty(a, mysymbol, );
//以上寫法都得到同樣結果
a[mysymbol] //
"hello!"
賦值-括號形式:
a[mysymbol]='web';
3.symbol物件元素的保護作用
在物件中有很多值,但是迴圈輸出時,並不希望全部輸出,那我們就可以使用symbol進行保護。
沒有進行保護的寫法:
var obj=;for (let item in
obj)
現在我不想別人知道我的年齡,這時候我就可以使用symbol來進行迴圈保護。
let obj=;let age=symbol();
obj[age]=18;
for (let item in
obj)
console.log(obj[age]);
待續.....
ES6 新特性之Symbol
symbol let s1 symbol foo let s2 symbol bar s1 symbol foo s2 symbol bar s1.tostring symbol foo s2.tostring symbol bar es6 引入了一種新的原始資料型別symbol,表示獨一無二的值。...
Symbol的學習筆記 ES6系列5
symbol的學習參考了以下大大們的部落格 僅為自己的學習筆記。在es5中,物件的屬性都是字串,很容易引起命名衝突的問題。如果你寫乙個物件,需要有一些屬性名你不想別人誤操作或修改,則可以借助symbol來完成。symbol為es6引入的第七種資料型別,也是原始資料型別。表示獨一無二的值。乙個symb...
ES6系列 ES6簡介
2015年6月17日,ecmascript的第六個版本正式發布,該版本正式名稱為ecmascript 2015,但通常被稱為ecmascript 6或者es6。瀏覽器對es6的支援情況 es6主要應用於node.js,如果想用在瀏覽器中,就需要使用轉碼器 將es6 轉成es5 這意味著,可以用es6...