您好,登錄后才能下訂單哦!
這篇文章主要用實例解析ES6 Symbol在對象中的作用,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
本文實例講述了ES6 Symbol在對象中的作用。分享給大家供大家參考,具體如下:
在ES5中 對象屬性名都是字符串,這容易造成屬性名的沖突,比如,你使用了一個他人提供的對象,但又想為這個對象添加新的方法(mixin 模式),新方法的名字就有可能與現有方法產生沖突,于是 ES6 引入了Symbol。Symbol是一種新的原始數據類型,表示獨一無二的值。它是繼undefined、null、布爾值(Boolean)、字符串(String)、數值(Number)、對象(Object)六種數據類型之后的第七種數據類型。凡是屬性名屬于 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函數的返回值,而且參數相同,但是它們是不相等的。
Symbol作為屬性名:
let mySymbol = Symbol(); // 第一種寫法 let a = {}; a[mySymbol] = 'Hello!'; // 第二種寫法 let a = { [mySymbol]: 'Hello!' }; // 第三種寫法 let a = {}; Object.defineProperty(a, mySymbol, { value: 'Hello!' }); // 以上寫法都得到同樣結果 a[mySymbol] // "Hello!"
賦值-括號形式:
a[mySymbol]='web';
在對象中有很多值,但是循環輸出時,并不希望全部輸出,那我們就可以使用Symbol進行保護。
沒有進行保護的寫法:
var obj={name:'小明',skill:'web',age:18}; for (let item in obj){ console.log(obj[item]); }
現在我不想別人知道我的年齡,這時候我就可以使用Symbol來進行循環保護。
let obj={name:'小明',skill:'web'}; let age=Symbol(); obj[age]=18; for (let item in obj){ console.log(obj[item]);//小明、web } console.log(obj[age]);
看完上述內容,是不是對用實例解析ES6 Symbol在對象中的作用有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。