ES6系列 10之Symbol在物件中的作用

2022-05-01 20:00:10 字數 1728 閱讀 1354

在es5中 物件屬性名都是字串,這容易造成屬性名的衝突,比如,你使用了乙個他人提供的物件,但又想為這個物件新增新的方法(mixin 模式),新方法的名字就有可能與現有方法產生衝突,於是 es6 引入了symbol。symbol是一種新的原始資料型別,表示獨一無二的值。它是繼undefinednull、布林值(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函式的返回值是不相等的。

s1s2都是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...