ES6新增数据类型符号(2):共享符号与知名符号
生活随笔
收集整理的這篇文章主要介紹了
ES6新增数据类型符号(2):共享符号与知名符号
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
1.共享符號
2.知名符號
1.共享符號
上節課講到每次調用得到的符號都是不相同的,但是存在需要同一個符號的需求,因此ES6提供了靜態方法for,可以根據某個符號名稱(符號描述)得到同一個符號,如下例
【例1-1】
const syb1 = Symbol.for('這是一個共享符號'); const syb2 = Symbol.for('這是一個共享符號'); console.log(syb1 === syb2);【結果】
圖1-1?【例1-2】兩個屬性共用同一個符號
const syb1 = Symbol.for('這是一個共享符號'); const syb2 = Symbol.for('這是一個共享符號'); const obj1 = {a: 1,b: 2,[syb1]: 3 } const obj2 = {a: 'a',b: 'b',[syb2]: 'c' } console.log(obj1, obj2);【結果】
圖1-2?【注】共享符號屬性可以訪問,如下例
【例1-3】
const obj = {a: 1,b: 2,[Symbol.for('c')]: 3 } console.log(obj[Symbol.for('c')])【結果】
圖1-3?【例1-4】共享符號實現代碼的仿寫
const SymbolFor=(()=>{const global = {};return function (name) {console.log(global);if (!global[name]) {global[name] = Symbol(name);}console.log(global);return global[name];} })(); const syb1 = SymbolFor('這是自己寫的共享符號'); const syb2 = SymbolFor('這是自己寫的共享符號'); console.log(syb1 === syb2);【結果】
圖1-42.知名符號
為了能使開發者參與到某些場景的內部實現,ES6提供了知名符號。知名符號是一些具有特殊含義的共享符號,通過Symbol的靜態屬性得到,接下來介紹幾個知名符號
1)Symbol.hasInstance
該知名符號用于定義構造函數的靜態成員,它影響instanceof的判定
【例2-1】
function A() {} const obj = new A(); console.log(obj instanceof A); Object.defineProperty(A,Symbol.hasInstance,{value:function (obj) {return false;} }) console.log(obj instanceof A);【結果】
?
2)Symbol.isConcatSpreadable
該知名符號會影響到數組的concat方法
3)Symbol.toPrimitive
該知名符號會影響類型轉換的結果
4)Symbol.toStringTag
該知名符號會影響Object.prototype.toString的返回值
【說明】由于2,3,4四個知名符號不怎么常用,在此不做贅述,只需要知道es6提供了一些方法,可以對內部實現進行操作即可,后期會具體講幾個會用到的知名符號
關于符號就到這里了,下面開始Promise的學習了,小景奧利給!!!
總結
以上是生活随笔為你收集整理的ES6新增数据类型符号(2):共享符号与知名符号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ES6新增数据类型符号(1):普通符号
- 下一篇: 理解JS的事件循环过程