首页 > 解决方案 > 使用 concat 函数连接问题

问题描述

在这种 concat() 函数的情况下,我不明白为什么长度属性的值没有连接到数组。此外,当我将长度属性的值更改为某个随机值时,当我连接它们时,前两个属性也会被忽略。第一种情况:

let arr = [1, 2];

let arrayLike = {
  0: "something",
  1: "else",
  [Symbol.isConcatSpreadable]: true,
  length: 2
};

alert( arr.concat(arrayLike) ); // 1,2,something,else

第二种情况:

let arr = [1, 2];

let arrayLike = {
  0: "something",
  1: "else",
  [Symbol.isConcatSpreadable]: true,
  length: "random",
};

console.log( arr.concat(arrayLike) ); // 1,2

标签: javascript

解决方案


您的arrayLike对象有点模仿像arr. 因此,如果您将其视为普通数组,那么您为什么希望将 的值length计为数组中的值呢?

在您的实际数组中arr,您将拥有arr.length == 2. 但2不是数组中的值,它只是告诉您数组中有多少值(两个值12)。这就是 JavaScript 知道要查找多少值的方式。如果你要设置arr.length = 1,突然间 JavaScript 只会显示一个值而不是两个。看这里:

let arr = [1, 2];
console.log(arr); //[1, 2]

arr.length = 1;
console.log(arr) //[1]

同样,对象中的length: 2属性arrayLike用于表示具有 2 个元素的数组。如果将其设置为不是数字的值,JavaScript 将不再知道“数组”中有多少个值,因此它显然只是将其视为 0 - 一个空数组。


推荐阅读