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>

当我们执行脚本时,它将在网页上显示文本。

广告