gpt4 book ai didi

javascript - 当我添加命名属性时,为什么数组会有这种行为?

转载 作者:行者123 更新时间:2023-11-30 07:39:54 24 4
gpt4 key购买 nike

我在浏览器控制台做了以下实验

  1. 我创建了一个新的数组
  2. "foo" 添加到 Array 作为命名索引 "name"
  3. 使用 push 方法将 “bar” 添加到 Array

4 & 5 是对Array

的测试
1. var myArray = [];            // undefined
2. myArray["name"] = "foo"; // "foo"
3. myArray.push("bar"); // 1

4. myArray.join(", "); // "bar"
5. myArray["name"]; // "foo"

我的问题(我不明白的地方)

  • .push() 返回 1,这是 Array 的长度,但它必须是 2 作为 Array 有两个值“foo”和“bar”

  • 测试 4 显示 Array 只有一个值 "bar" 但测试 5 反对它显示它还有一个值 "foo "

  • 为什么 Array 方法(pushjoin 等)对键/值对不起作用?

  • 那么关联 Array 是如何工作的以及我们如何处理它(方法、属性等)。

最佳答案

.push() returns 1 which is the length of the Array, but it must be 2 as the Array has two values "foo" & "bar"

不,因为 JavaScript 中的数组不是关联数据结构(即使您可以将任意属性附加到它们)。唯一算作“数组内容”的项目是那些属性名称满足 certain conditions 的项目.

您还应该知道 length如果阵列有“洞”,也可能会报告一个比您预期的更大的数字。例如:

var a = [1, 2, 3];
console.log(a.join(" "), a.length); // "1 2 3", 3
delete a[1];
console.log(a.join(" "), a.length); // "1 3", still 3!

Test 4 shows that the Array has only one value "bar" but test 5 oppose it showing that it also has a value "bar".

那是无关紧要的。该数组还有许多其他属性,但join只会触及前面提到的那些。

Why doesn't Array methods (push, join etc) works on key/value pairs ?

因为规范就是这么说的。

Then how does associative Array works and how we can handle it(methods, properties etc).

如果您需要字符串键,请使用普通对象而不是数组。

关于javascript - 当我添加命名属性时,为什么数组会有这种行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20270345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com