<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        ES6 Symbol數據類型的應用實例分析

        來源:懂視網 責編:小采 時間:2020-11-27 21:54:29
        文檔

        ES6 Symbol數據類型的應用實例分析

        ES6 Symbol數據類型的應用實例分析:本文實例講述了ES6 Symbol數據類型的應用。分享給大家供大家參考,具體如下: Symbol,是ES6中引入的新的數據類型,表示獨一無二的值。在面向對象中,每個對象都有字符串類型的屬性,新方法的名字就有可能與現有方法產生沖突。Symbol的引入保證每個屬性的
        推薦度:
        導讀ES6 Symbol數據類型的應用實例分析:本文實例講述了ES6 Symbol數據類型的應用。分享給大家供大家參考,具體如下: Symbol,是ES6中引入的新的數據類型,表示獨一無二的值。在面向對象中,每個對象都有字符串類型的屬性,新方法的名字就有可能與現有方法產生沖突。Symbol的引入保證每個屬性的

        ES6之前對象屬性的命名方法

        var obj = {
         name:'Joh',
         'my name': 'Johnny'
        }
        console.log(obj.name); // Joh
        console.log(obj['my name']); // Johnny
        
        

        引入Symbol之后,變量可以不再重復

        let name1 = Symbol('name');
        let name2 = Symbol('name');
        console.log(name1 === name2); // false
        
        

        可以看出,雖然都是調用了Symbol函數,但是返回的Symbol類型的name1和name2并不相等

        將Symbol類型轉換為字符串類型

        let name1 = Symbol('name');
        let name2 = Symbol('name');
        console.log(name1.toString());// Symbol(name)
        console.log(String(name2)); // Symbol(name)
        
        

        Symbol類型應用于對象的屬性

        let getName = Symbol('name');
        let obj = {
         [getName]() {
         return 'Joh';
         }
        }
        console.log(obj[getName]()); // Joh
        
        

        Symbol類型的屬性具有一定的隱藏性

        let name = Symbol('name');
        let obj = {
         age:22,
         [name]:'Joh'
        };
        console.log(Object.keys(obj)); // 打印不出 類型為Symbol的[name]屬性
        // 使用for-in也打印不出 類型為Symbol的[name]屬性
        for(var k in obj) {
         console.log(k);
        }
        // 使用 Object.getOwnPropertyNames 同樣打印不出 類型為Symbol的[name]屬性
        console.log(Object.getOwnPropertyNames(obj));
        // 使用 Object.getOwnPropertySymbols 可以
        var key = Object.getOwnPropertySymbols(obj)[0];
        console.log(obj[key]); // Joh
        
        

        使用Symbol類型模擬對象的私有屬性

        User 模塊

        'use strict';
        let getName = Symbol('getName');
        module.exports = class User {
         [getName]() {
         return 'Joh';
         }
         print() {
         console.log(this[getName]());
         }
        }
        
        

        測試User模塊

        'use strict';
        const User = require('./User');
        let user = new User();
        user.print(); // Joh
        let getName = Symbol('getName');
        user[getName](); // getName is not defined 報錯, 可知 Symbol 可以在面向對象中模擬私有屬性
        
        

        Symbol.for 和 Symbol.keyFor的應用

        let name1 = Symbol.for('name');
        let name2 = Symbol.for('name');
        console.log(name1 === name2); // true
        console.log(Symbol.keyFor(name1)); // name 備注:字符串類型的
        
        

        使用Symbol.for 獲取Symbol類型的值,使用Symbol.keyFor來獲取之前的字符串

        使用for-of來順序輸出數組的單項

        let arr = ['a', 'b', 'c'];
        for(let item of arr) {
         console.log(item); // 順序
        輸出 a b c }

        使用Symbol.iterator迭代器來逐個返回數組的單項

        let arr = ['a', 'b', 'c'];
        var iterator = arr[Symbol.iterator]();
        // next 方法返回done表示是否完成
        console.log(iterator.next()); // {value: "a", done: false}
        console.log(iterator.next()); // {value: "b", done: false}
        console.log(iterator.next()); // {value: "c", done: false}
        console.log(iterator.next()); // {value: undefined, done: true}
        console.log(iterator.next()); // {value: undefined, done: true}
        
        

        程序的優化:

        let arr = ['a', 'b', 'c'];
        var iterator = arr[Symbol.iterator]();
        // next 方法返回done表示是否完成
        var next = iterator.next();
        while(!next.done) {
         console.log(next);
         next = iterator.next();
        };
        
        

        Symbol.iterator在面向對象中的應用實例1:

        'use strict';
        class UserGroup {
         constructor(users) {
         // json {joh:111,lili:1123}
         this.users = users;
         }
         [Symbol.iterator]() {
         let self = this;
         let i = 0;
         const names = Object.keys(this.users);
         const length = names.length;
         // iterator 對象,可以理解為指針
         return {
         next() {
         let name = names[i++];
         let qq = self.users[name];
         return {value: {name, qq}, done: i > length}
         }
         }
         }
        }
        let group = new UserGroup({'Joh':'595959','Lili':'888116'});
        for (let user of group) {
         console.log(user);
        }
        // { name: 'Joh', qq: '595959' }
        // { name: 'Lili', qq: '888116' }
        
        

        Symbol.iterator在面向對象中的應用實例2:

        'use strict';
        var obj = {'Joh':'56999', 'Lili':'899888'};
        obj[Symbol.iterator] = function() {
         let self = this;
         let i = 0;
         const names = Object.keys(this);
         const length = names.length;
         // iterator 對象,可以理解為指針
         return {
         next() {
         let name = names[i++];
         let qq = self[name];
         return {value: {name, qq}, done: i > length}
         }
         }
        }
        for (let u of obj) console.log(u);
        
        

        程序優化之后:

        'use strict';
        var obj = {'Joh':'56999', 'Lili':'899888'};
        let iteratorFun = function () {
         let self = this;
         let i = 0;
         const names = Object.keys(this);
         const length = names.length;
         // iterator 對象,可以理解為指針
         return {
         next() {
         let name = names[i++];
         let qq = self[name];
         return {value: {name, qq}, done: i > length}
         }
         }
        }
        obj[Symbol.iterator] = iteratorFun;
        for (let u of obj) console.log(u);
        
        

        Symbol.iterator應用于偽數組中

        'use strict';
        var obj = {
         length:2,
         '0':'abc',
         '1':'ddd'
        }
        /*
        // if this , err: obj is not iterable
        for (let i of obj) {
         console.log(i);
        }
        */
        obj[Symbol.iterator] = [][Symbol.iterator]; // handle this first
        // then
        for (let i of obj) {
         console.log(i);
        }
        
        

        字符串實現了Symbol.iterator接口

        'use strict';
        console.log('Joh'[Symbol.iterator]); // [Function: [Symbol.iterator]]
        for(let char of 'Lili') {
         console.log(char);
        }
        
        

        同樣的,在ES6中在set, map 字符串都能實現 Symbol.iterator接口

        更多關于JavaScript相關內容可查看本站專題:《javascript面向對象入門教程》、《JavaScript切換特效與技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

        希望本文所述對大家JavaScript程序設計有所幫助。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        ES6 Symbol數據類型的應用實例分析

        ES6 Symbol數據類型的應用實例分析:本文實例講述了ES6 Symbol數據類型的應用。分享給大家供大家參考,具體如下: Symbol,是ES6中引入的新的數據類型,表示獨一無二的值。在面向對象中,每個對象都有字符串類型的屬性,新方法的名字就有可能與現有方法產生沖突。Symbol的引入保證每個屬性的
        推薦度:
        標簽: 使用 應用 類型
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 免费国产成人午夜私人影视| 亚洲精品无码久久久久去q| 91天堂素人精品系列全集亚洲| 猫咪免费人成在线网站| 国产精品区免费视频| 在线观看免费人成视频色| 亚洲精品免费在线观看| 亚洲视频免费在线观看| 亚洲AV无码成H人在线观看| 精品国产亚洲第一区二区三区| 国产午夜鲁丝片AV无码免费| 美女视频黄a视频全免费网站一区 美女视频黄a视频全免费网站色 | 亚洲国产精品嫩草影院| 中文成人久久久久影院免费观看 | 女人18毛片水真多免费播放| 亚洲综合av一区二区三区| 日韩特黄特色大片免费视频| 国产午夜亚洲精品不卡免下载| 亚洲精品免费在线| 亚洲色偷偷偷综合网| 亚洲精品天堂成人片?V在线播放| 亚洲人成电影在线观看青青| 福利免费在线观看| 亚洲国产精品久久久久久| 在线观看H网址免费入口| 亚洲a∨无码精品色午夜| 亚洲伊人成无码综合网| 国产精品免费AV片在线观看| wwwxxx亚洲| 亚洲狠狠爱综合影院婷婷| 日韩免费电影网址| 亚洲午夜无码久久| 久久久久亚洲爆乳少妇无| 青草青草视频2免费观看| 亚洲AV美女一区二区三区| 久久久久国色AV免费看图片| 五月天婷婷精品免费视频| 91精品国产亚洲爽啪在线观看| 免费看香港一级毛片| 国产色无码精品视频免费| 国产偷国产偷亚洲高清日韩|