JavaScript - Symbol.isConcatSpreadable 屬性



Symbol.isConcatSpreadable 屬性用於自定義物件在作為引數傳遞給 Array.prototype.concat() 方法時的行為。如果嘗試對陣列呼叫 concat(),它會自動展平巢狀陣列。但是,如果嘗試將物件而不是陣列傳遞給 concat(),則它將被視為單個物件,不會展平。如果您希望以展平物件中陣列的方式連線陣列,這可能會導致問題。

這就是需要使用 Symbol.isConcatSpreadable 的原因。當物件的 Symbol 屬性設定為 true 時,表示 concat() 應該在提供給它時展平該物件。如果設定為 false 或不存在,則該物件將被視為單個專案,不會被展平。

語法

以下是 JavaScript Symbol.isConcatSpreadable 屬性的語法:

Array[Symbol.isConcatSpreadable]

引數

此屬性不接受任何引數。

返回值

此屬性返回連線結果。

示例

示例 1

讓我們看下面的示例,我們將使用 isConcatSpreadable 並將 Array 設定為 false。

<html>
   <style>
      body {
         font-family: verdana;
         color: #DE3163;
      }
   </style>
   <body>
      <script>
         Symbol.prototype.lengthx = function() {
            return this.description.length;
         };
         const a = Symbol('TutorialsPoint');
         document.write(a.lengthx());
      </script>
   </body>
</html>

如果執行上述程式,它將在網頁上顯示數字。

示例 2

考慮另一種情況,我們將使用 isConcatSpreadable 並將 Array 設定為 true。

<html>
   <style>
      body {
         font-family: verdana;
         color: #DE3163;
      }
   </style>
   <body>
      <script>
         const x = ['a', 'b', 'c'];
         const y = [1, 4, 3];
         y[Symbol.isConcatSpreadable] = true;
         const result = x.concat(y);
         document.write(JSON.stringify(result));
      </script>
   </body>
</html>

執行上述指令碼後,它將在網頁上顯示文字。

示例 3

在下面的示例中,我們將使用 isConcatSpreadable 和 Array.from() 方法。

<html>
   <style>
      body {
         font-family: verdana;
         color: #DE3163;
      }
   </style>
   <body>
      <script>
         const x = {
            length: 3,
            0: 'Rabbit',
            1: 'Fox',
            2: 'Lion',
            [Symbol.isConcatSpreadable]: true
         };
         const a = ['Carrot'];
         const result = Array.from(a).concat(x);
         document.write(JSON.stringify(result));
      </script>
   </body>
</html>

當我們執行指令碼時,它將在網頁上顯示文字。

廣告