<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                Symbol是[ES6](https://so.csdn.net/so/search?q=ES6&spm=1001.2101.3001.7020)中引入的一種新的基本數據類型,用于表示一個獨一無二的值。它是JavaScript中的第七種數據類型,與undefined、null、Number(數值)、String(字符串)、Boolean(布爾值)、Object(對象)并列。 你可以這樣創建一個Symbol值: ~~~typescript const a = Symbol(); console.log(a); //Symbol() ~~~ 使用Symbol函數可以生成一個Symbol類型的值,但是你不能在調用Symbol時使用new關鍵字,因為Symbol是基本數據類型,而不是對象。比如下面的寫法是錯誤的: ~~~typescript //報錯,Symbol is not a constructorconst a = new Symbol(); ~~~ 使用Symbol()創建一個Symbol類型的值并賦值給a變量后,你就得到了一個在內存中獨一無二的值。現在除了通過變量a,任何人在任何作用域內都無法重新創建出這個值。例如當你這樣寫: ~~~typescript const b = Symbol(); ~~~ 盡管a和b都是使用Symbol()創建出來的,但是它們在內存中看起來卻是這樣的: ![](https://img-blog.csdnimg.cn/20191130113820517.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjk0Mjkx,size_16,color_FFFFFF,t_70) 實際上,a變量拿到了內存中某塊內存的唯一引用(這里所說的引用,其實就是該內存的地址)。如果不借助a變量,你不可能再得到這個地址。因此: ~~~delphi a !== b; //a和b持有的是兩塊內存的引用 const c = a; //手動把a里保存的地址保存在c變量中a === c; //c和a現在指向同一塊內存,因為它們保存了同樣的地址 ~~~ ?![](https://img-blog.csdnimg.cn/20191130134842266.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjk0Mjkx,size_16,color_FFFFFF,t_70) 這種行為看似難以理解,但其實它與對象遵循相同的規則,如: ~~~delphi var a = {};var b = {}; a !== b; //a和b各自被分配了不同的內存,因此它們保存了不同的地址 //借助變量a,變量c拿到了a指向的那個對象的地址,因此兩者相等var c = a;a === c; ~~~ ?但是對于同為基本數據類型的[字符串](https://so.csdn.net/so/search?q=%E5%AD%97%E7%AC%A6%E4%B8%B2&spm=1001.2101.3001.7020)來說,它不遵循類似的規則。 比如: ~~~typescript var a = "123";var b = "123"; a === b; //返回true。兩者在常量區引用同一個字符串 ~~~ ![](https://img-blog.csdnimg.cn/20191130135207337.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjk0Mjkx,size_16,color_FFFFFF,t_70) 我們首先通過變量a在內存中創建了字符串“123”,然后在不借助變量a的情況下,又通過var b = "123"拿到了對“123”這個字符串的引用,兩者指向內存中的同一塊內存地址。 因此我們說,a無法確保別的變量無法拿到它保存的地址(前提是不通過a)。但是對于var a = Symbol()這樣的語句,a變量內保存的值是唯一的,因為除了借助a變量,你永遠無法得到a中保存的值。這也是Symbol的本質。 可能很多人比較奇怪,一個Symbol類型的變量里面到底保存了什么呢? 我們看兩行代碼: ~~~typescript var a = Symbol(); console.log(a); //Symbol() ~~~ 我們試圖輸出a的值,但js引擎輸出了Symbol()。顯然它不能說明a的值是字符串,因為: ~~~typescript typeof a === "symbol"; ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看