<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级毛片无码A| 免费国产a国产片高清| 亚洲AV无码乱码国产麻豆 | 亚洲精品无码激情AV| 美女被免费网站在线视频免费 | 国产亚洲人成网站观看| 在线看片免费人成视频久网下载| 亚洲中文字幕在线观看| 99在线视频免费观看| 亚洲av永久无码精品秋霞电影影院| 国产免费无码一区二区| jizz在线免费播放| 国产精品亚洲αv天堂无码| 亚洲综合激情视频| 久九九精品免费视频| 亚洲日韩国产欧美一区二区三区| 中文字幕不卡免费高清视频| 亚洲精品国精品久久99热一| 你懂的免费在线观看网站| 亚洲成人黄色在线| 最近免费字幕中文大全| 亚洲国产一区国产亚洲| 1000部拍拍拍18勿入免费视频下载| 亚洲一级特黄大片在线观看 | 91久久成人免费| 亚洲精品久久无码| 中文字幕亚洲无线码| 日韩内射激情视频在线播放免费| 亚洲成AV人综合在线观看| 永久黄网站色视频免费直播| 国产精品福利在线观看免费不卡| 久久久久久亚洲精品| 免费精品国产自产拍在线观看图片| 亚洲中文字幕久久久一区| 日本免费网站视频www区| 亚洲av中文无码字幕色不卡| 亚洲午夜久久久久妓女影院| 免费99精品国产自在现线| 日韩在线一区二区三区免费视频| 少妇中文字幕乱码亚洲影视| 日本黄色免费观看|