es6 Symbol iterator接口
生活随笔
收集整理的這篇文章主要介紹了
es6 Symbol iterator接口
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Symbol定義:一種新的原始數據類型,表示獨一無二的值,是一種類似字符串的數據類型
特點:
值是唯一的,用來解決命名沖突的問題
值不能與其他數據進行運算
注意點
Symbol 值作為屬性名時,該屬性是公有屬性不是私有屬性,可以在類的外部訪問。但是不會出現在 for...in 、 for...of 的循環中,也不會被 Object.keys() 、 Object.getOwnPropertyNames() 返回。如果要讀取到一個對象的 Symbol 屬性,可以通過 Object.getOwnPropertySymbols() 和 Reflect.ownKeys() 取到。
// 創建Symbol() let s = Symbol();let s2= Symbol('小紅') let s3= Symbol('小紅') consle.log(s2===s3) //false//Symbol.for創建 let s4 =Symbol.for('小明'); let s5 =Symbol.for('小明'); console.log(s4===s4) //true//不能與其他數據進行運算 let result= s+100 // 報錯// 使用場景let up = Symbol('say');let game = {up: '1111',[up]: function () {console.log('我可以發言')},[Symbol('down')]: function () {console.log('我可以下降')}}console.log(game)?
symbol.for()
Symbol.for() 類似單例模式,首先會在全局搜索被登記的 Symbol 中是否有該字符串參數作為名稱的 Symbol 值,如果有即返回該 Symbol 值,若沒有則新建并返回一個以該字符串參數為名稱的 Symbol 值,并登記在全局環境中供搜索。
let yellow = Symbol("Yellow"); let yellow1 = Symbol.for("Yellow"); yellow === yellow1; // falselet yellow2 = Symbol.for("Yellow"); yellow1 === yellow2; // true?
Symbol.keyFor()
Symbol.keyFor() 返回一個已登記的 Symbol 類型值的 key ,用來檢測該字符串參數作為名稱的 Symbol 值是否已被登記。
let yellow1 = Symbol.for("Yellow"); Symbol.keyFor(yellow1); // "Yellow"?
?
?
Symbol 內置值(擴展對象功能的)
?
迭代器(Iterator)
就是對象里的屬性?
主要供for...of 遍歷 鍵值
let xiyou=['唐僧','孫悟空','豬八戒','沙僧'] 遍歷數據工作原理 // 創建指針獨享,指向當前數據 結構的起始位置 let iterator = xiyou[Symbol.iterator](); // 調用對象的next方法第一次調用next方法,指針自動指向數據結構的第一個成員接下來不斷調用next方法,指針一直往后移動,直到指向最后一個成員每調用next方法返回一個包含value和dine屬性的對象 console.log(iterator.next()) //{value:'唐僧',done:false} console.log(iterator.next()) //{value:'孫悟空',done:false} console.log(iterator.next()) //{value:'豬八戒',done:false} console.log(iterator.next()) //{value:'沙僧',done:false} console.log(iterator.next()) //undefined{value:undefined,done:false}?
總結
以上是生活随笔為你收集整理的es6 Symbol iterator接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DevOps“兵器”60样,你都会使哪几
- 下一篇: 教师节 | 程序员都这么玩,你敢挑战吗?