javascript - 使用 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
解决方案
您的arrayLike
对象有点模仿像arr
. 因此,如果您将其视为普通数组,那么您为什么希望将 的值length
计为数组中的值呢?
在您的实际数组中arr
,您将拥有arr.length == 2
. 但2
不是数组中的值,它只是告诉您数组中有多少值(两个值1
和2
)。这就是 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 - 一个空数组。
推荐阅读
- python - 如何计算输入数字的百分比?
- angular - 为什么使用 Bootstrap 进行分页不起作用?
- python - 链式映射增加列表嵌套级别
- batch-file - 通过 IDM 下载文件并创建与源相同的文件结构
- download - 如何使用 YouTube-dl 下载 blob 链接
- assembly - QtSPIM:在询问变量和存储时,在继续之前返回各种错误
- r - 使用行谓词过滤列以仅保留负单元格值
- css - 使用 Gtk3 FontChooserDialog 作为 GtkCssProvider 的输入
- wordpress - Wordpress 子域到域
- reactjs - 使用 Javascript 连接到通过 MassTransit 和 RabbitMQ dotnet 服务运行的消息服务总线