<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 19:28:40
        文檔

        ES6中Symbol相關知識的介紹(代碼示例)

        ES6中Symbol相關知識的介紹(代碼示例):本篇文章給大家帶來的內容是關于ES6中Symbol相關知識的介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。symbol是es6出的一種類型,他也是屬于原始類型的范疇(string, number, boolean, null, undefine
        推薦度:
        導讀ES6中Symbol相關知識的介紹(代碼示例):本篇文章給大家帶來的內容是關于ES6中Symbol相關知識的介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。symbol是es6出的一種類型,他也是屬于原始類型的范疇(string, number, boolean, null, undefine

        本篇文章給大家帶來的內容是關于ES6中Symbol相關知識的介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

        symbol是es6出的一種類型,他也是屬于原始類型的范疇(string, number, boolean, null, undefined, symbol)

        basic

        let name = Symbol('xiaohesong')
        typeof name // 'symbol'
        let obj = {}
        obj[name] = 'xhs'
        console.log(obj[name]) //xhs

        symbol for

        這個東西是可共享,在創建的時候會檢查全局是否尋在這個key的symbol.如果存在就直接返回這個symbol,如果不存在就會創建,并且在全局注冊。

        let uid = Symbol.for("uid");
        let object = {
         [uid]: "12345"
        };
        
        console.log(object[uid]); // "12345"
        console.log(uid); // "Symbol(uid)"
        
        let uid2 = Symbol.for("uid");
        
        console.log(uid === uid2); // true
        console.log(object[uid2]); // "12345"
        console.log(uid2); // "Symbol(uid)"
        此處所說的共享是全局性的共享,類似于global scope,是整個大環境下的共享.

        symbol keyfor

        let uid = Symbol.for("uid");
        console.log(Symbol.keyFor(uid)); // "uid"
        
        let uid2 = Symbol.for("uid");
        console.log(Symbol.keyFor(uid2)); // "uid"
        
        let uid3 = Symbol("uid");
        console.log(Symbol.keyFor(uid3)); // undefined

        全局注冊表不存在uid3這個共享的symbol.所以取不出對應的key.由此可見,這個是獲取對應的key.

        symbol 不可強制轉換

        let uid = Symbol('uid')
        uid + ''

        這里會報錯,根據規范,他會把uid轉換成字符串進行相加。如果真的相加,可以先String(uid)之后再相加,不過目前看來,似乎沒什么意義。

        obj中symbol key的獲取

        let uid = Symbol('uid')
        let obj = {
         [uid]: 'uid'
        }
        
        console.log(Object.keys(obj)) // []
        console.log(Object.getOwnPropertyNames(obj)) // []
        console.log(Object.getOwnPropertySymbols(obj)) // [Symbol(uid)]

        es6針對這個,添加了Object.getOwnPropertySymbols方法。

        是不是感覺很少用到Symbols.其實es6內部用的還是不少的。

        Symbol.hasInstance

        每個函數都有這個方法。或許你對這個方法不是很熟,他其實就是instanceof所做的事情。 沒錯,es6給你重寫了這個方法。

        function Xiao(){}
        const xiao = new Xiao
        xiao instanceof Xiao // true

        實際上es6幫你那么干了

        Xiao[Symbol.hasInstance](xiao)

        這個是內部的方法,不支持重寫,當然,我們可以在原型上改寫。

        Object.definePrototype(Xiao, Symbol.hasInstance, {
         value: (v) : Boolean(v)
        })
        const x = new Xiao
        x instanceof Xiao //true
        0 instanceof Xiao //false
        1 instanceof Xiao //true

        可以發現,我們改寫他返回對應的是否為boolean類型。

        Symbol.isConcatSpreadable

        這個和其他的一些屬性不同,他是默認不存在一些標準對象上。簡單的使用

        let objs = {0: 'first', 1: 'second', length: 2, [Symbol.isConcatSpreadable]: true}
        ['arrs'].concat(objs) //["arrs", "first", "second"]

        Symbol.toPrimitive

        這個用的就多了,進行類型轉換的時候,對象會進行嘗試轉換成原始類型,就是通過toPrimitive.這個方法,標準類型的原型上都存在。
        進行類型轉換的時候,toPrimitive會被強制的調用一個參數,在規范中這個參數被稱之為hint. 這個參數是三個值('number', 'string', 'default')其中的一個。
        顧名思義,string返回的是string, number返回的是number,default是沒有特別指定,默認。
        那么什么是默認的情況呢? 大多數的情況下,默認情況就是數字模式。(日期除外,他的默認情況視為字符串模式)
        其實在類型轉換時調用默認情況的也不是很多。如(==, +)或者將參數傳遞給Date的構造參數的時候。

      1. number mode 在數字情況下的行為(優先級從高到低)

      2. 首先調用valueOf,如果是一個原始類型,那就返回。

      3. 如果前面不是原始值,那么就嘗試調用toString,如果是原始值,那么就返回

      4. 如果都不存在,那么就報錯

      5. string mode 在字符串的情況下,行為略有不同(優先級從高到低)

      6. 首先調用toString,如果是原始值,那么就返回

      7. 如果前面不是原始值,那么就嘗試調用valueOf,如果是原始值,那么就返回

      8. 拋出錯誤

      9. 嗯,是不是感覺挺繞的,是啊,代碼闡述下嘛。

        let obj = {
         valueOf: function(){console.log('valueOf')},
         toString: function(){console.log('toString')}
        }
        // console.log value is
        obj + 2 //valueOf
        obj == 2 // valueOf
        Number(obj) // valueOf
        String(obj) // toString

        通過上面的輸出,可以發現大多數的情況都是首先調用valueOf.
        包括默認的情況,他的默認是調用的數字模式,而且絕大數都是調用的數字模式,可以發現toString是調用了string的模式。所以你可以認為,基本就是數字模式,除非很顯示的是字符串模式。
        對于這個調用的模式還不是很清楚?沒事,es6把這個內部的方法對外暴露出來了,我們可以改寫他,輸出這個hint的類型。 來

        function Temperature(degrees) {
         this.degrees = degrees;
        }
        
        Temperature.prototype[Symbol.toPrimitive] = function(hint) {
         console.log('hint is', hint)
        };
        
        let freezing = new Temperature(32);
        
        freezing + 2 // ..
        freezing / 2 // ..
        ...

        上面的類型,你可以試試。

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

        文檔

        ES6中Symbol相關知識的介紹(代碼示例)

        ES6中Symbol相關知識的介紹(代碼示例):本篇文章給大家帶來的內容是關于ES6中Symbol相關知識的介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。symbol是es6出的一種類型,他也是屬于原始類型的范疇(string, number, boolean, null, undefine
        推薦度:
        標簽: 介紹 知識 簡介
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲成a人片在线观看日本麻豆| 日韩免费观看的一级毛片| 中国黄色免费网站| 五月婷婷亚洲综合| 亚洲国产电影在线观看| 日本免费人成在线网站| 亚洲人成影院午夜网站| 无码视频免费一区二三区 | xvideos亚洲永久网址| 亚洲A∨精品一区二区三区下载| 国产精品久久香蕉免费播放| 亚洲精品在线免费观看| 中文字幕免费人成乱码中国| 亚洲精品tv久久久久久久久| 日本免费一区二区三区| 亚洲人色大成年网站在线观看 | 免费人成激情视频| 国产精品九九久久免费视频| 国产精品免费视频一区| 深夜a级毛片免费视频| 国产精品国产午夜免费福利看| 看免费毛片天天看| 亚洲AV中文无码乱人伦下载| 色婷婷综合缴情综免费观看| 国产亚洲精品免费视频播放| 99精品视频在线视频免费观看| 国产成人精品日本亚洲直接 | 日本中文一区二区三区亚洲| 国产免费一区二区视频| 精品久久亚洲中文无码| 亚洲国产精品成人久久蜜臀 | 99re在线视频免费观看| 亚洲人成欧美中文字幕| 亚洲中文字幕无码日韩| 精品国产无限资源免费观看| 理论片在线观看免费| 亚洲精品免费在线观看| 免费人成黄页在线观看日本| 亚洲人成人网毛片在线播放| AV片在线观看免费| 亚洲av无码一区二区三区人妖|