站長資訊網
        最全最豐富的資訊網站

        es6新增的js基本數據類型有哪些

        es6新增的基本數據類型:1、Symbol類型,表示獨一無二的值,即Symbol實例是唯一、不可變的;它的產生是因為要用來唯一的標記,進而用作非字符串形式的對象屬性,是確保對象屬性使用唯一標識符,不會發生屬性沖突的危險。2、BigInt類型,提供對任意長度整數的支持,主要是為了表達大于“2^53-1”的整數。

        es6新增的js基本數據類型有哪些

        前端(vue)入門到精通課程:進入學習
        Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調試工具:點擊使用

        本教程操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。

        基本數據類型 也稱為原始數據類型,包括String、Number、Boolean、undefined、null、Symbol、BigInt,其中SymbolBigInt為ES6新增。

        Symbol 類型

        Symbol 是 ECMAScript6 中引入的一種新的數據類型,表示獨一無二的值。Symbol 是原始值(基礎數據類型),且 Symbol 實例是唯一、不可變的。它的產生是因為要用來唯一的標記,進而用作非字符串形式的對象屬性,是確保對象屬性使用唯一標識符,不會發生屬性沖突的危險。

        在 ES6 之前,對象的鍵只能是字符串類型,但是這樣有個問題,就是會造成鍵名命名沖突,后者覆蓋前者,這個時候就需要一個唯一值來充當鍵名,Symbol 橫空出世。

        1、概念

        symbol 是一種基本數據類型,Symbol()函數會返回 symbol 類型的值,該類型具有靜態屬性和靜態方法。但是它不是構造函數,不能用 new Symbol()來創建。

        let symbol = Symbol(); typeof symbol; // "symbol"
        登錄后復制

        Symbol 作為對象屬性時,當在對象內部時,必須要用方括號括起來,不用方括號括起來代表的是字符串。

        let s = Symbol(); let obj = {   [s]: "Jack", }; obj[s]; // "Jack" obj.s; // undefined
        登錄后復制

        而且當要取該屬性的值時,不能用點運算符,因為點運算符后面同樣是字符串類型。

        創建 Symbol 數據類型時,都是 Symbol()這么創建的,當打印出來時,都為 Symbol(),這樣很難區別各個 Symbol 類型的變量是什么意思。所以在 Symbol 函數內可以接收一個字符串的參數,表示該定義 Symbol 類型變量的描述。

        let s1 = Symbol("a"); console.log(s1); // Symbol(a) s1.toString(); // "Symbol(a)"
        登錄后復制

        如果 Symbol 類型接收的一個對象類型的話,那就會先調用其內部的 toString 方法,將其變為一個字符串,然后才生成一個 Symbol 值。

        let arr = [1, 2, 3]; let s1 = Symbol(arr); console.log(s1); // Symbol(1,2,3) let obj = {   toString: () => "abc", }; let s2 = Symbol(obj); console.log(s2); // Symbol(abc)
        登錄后復制

        Symbol 類型的變量是不能和其他變量參與運算的,而且其只能轉為 String 類型和 Boolean 類型。

        let s = Symbol(); console.log("1" + s); // TypeError: Cannot convert a Symbol value to a string s.toString(); // "Symbol()" Boolean(s); // true Number(s); // TypeError: Cannot convert a Symbol value to a number
        登錄后復制

        2、Symbol.prototype.description

        當給 Symbol 添加描述時,可以通過 Symbol.prototype.description 來獲取該描述。

        let s = Symbol("Jack"); s.description; // 'Jack'
        登錄后復制

        3、Symbol.for(key)和 Symbol.keyFor(sym)

        最開始看到這兩個方法時,我以為是兩個遍歷的方法。

        • Symbol.for(key):使用給定的 key 搜索現有的 symbol,如果找到則返回該 symbol。否則將使用給定的 key 在全局 symbol 注冊表中創建一個新的 symbol。

        • Symbol.keyFor(sym):從全局 symbol 注冊表中,為給定的 symbol 檢索一個 key。

        let s1 = Symbol.for("foo"); let s2 = Symbol.for("foo"); s1 === s2; // true
        登錄后復制

        Symbol.for 會搜索有沒有以該參數作為名稱的 Symbol 值。如果有,就返回這個 Symbol 值,否則就新建一個以該字符串為名稱的 Symbol 值,并將其注冊到全局。所以由其創建的兩個相同描述的值會相等。這種創建就和普通的 Symbol()有著截然不同的結果了:

        let s1 = Symbol("foo"); let s2 = Symbol("foo"); s1 === s2; // false
        登錄后復制

        因為不管怎樣 Symbol()返回的都是一個全新的值,換句話說 Symbol()生成的值沒有注冊在全局中,所以返回的值都是全新的,而 Symbol.for()會在先在全局中查找,有就返回這個值,沒有則創建新的值,但新的值也是掛載在全局中的。

        Symbol.keyFor(sym)是在全局中查找是否有該 Symbol 值,有則返回該描述。

        let s1 = Symbol.for("Jack"); Symbol.keyFor(s1); // 'Jack' let s2 = Symbol("Rose"); Symbol.keyFor(s2); // undefined
        登錄后復制

        因為 s2 沒有掛載在全局中,所以 Symbol.keyFor()找不到它,故返回 undefined。

        4、內置的 Symbol 屬性

        除了定義自己使用的 Symbol 值以外,ES6 還提供了 13(有可能今后會

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产成人无码精品久久久久免费 | 国产精品片在线观看手机版| 亚洲中文字幕无码久久精品1| 99精品久久久久久久婷婷| 久久99精品久久只有精品| 精品国产青草久久久久福利| 2023国产精品自拍| 久久国产精品99久久久久久老狼| 国内精品久久久人妻中文字幕| 亚洲精品永久在线观看| 欧美ppypp精品一区二区| 国产精品综合久成人| 91国内揄拍国内精品对白不卡| 国产精品视频免费| 国产精品久久久久久吹潮| 欧美性videos高清精品| 亚洲精品国产精品乱码视色| 亚洲国产精品无码久久九九| 日本免费精品一区二区三区| 欧美精品福利在线视频| 欧美人与性动交α欧美精品成人色XXXX视频 | 亚洲国产精品日韩| 亚洲国产精品成人| 中国大陆精品视频XXXX| 亚洲无码日韩精品第一页| 中文字幕精品亚洲无线码一区应用| 亚州日韩精品专区久久久| 亚洲国产91精品无码专区| 亚洲精品WWW久久久久久| 香蕉国产精品麻豆亚洲欧美日韩精品自拍欧美v国 | 777被窝午夜精品影院| 欧美精品高清在线观看| 久久国产精品国产自线拍免费| 99精品国产丝袜在线拍国语| 999在线视频精品免费播放观看| 精品久久无码中文字幕| 精品人妻人人做人人爽| 国产三级精品三级在线专区1| 99久久国产热无码精品免费 | 国产欧美精品一区二区色综合 | 无码国模国产在线无码精品国产自在久国产 |