我在浏览器控制台中进行了以下实验
Array
。"foo"
添加到Array
作为命名索引"name"
。"bar"
方法将Array
添加到push
。 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”& “酒吧”
测试4显示Array
只有一个值"bar"
,但测试5反对它,表明它还有一个值"foo"
。
为什么Array
方法(push
,join
等)不适用于键/值对?
Array
如何运作以及我们如何处理它(方法,属性等)。答案 0 :(得分:4)
.push()返回1,这是Array的长度,但它必须是数组所具有的2 两个值“foo”& “酒吧”
不,因为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!
测试4显示数组只有一个值“bar”,但测试5反对它,表明它也有一个值“bar”。
那是无关紧要的。该数组还有许多其他属性,但join
只会触及前面提到的那些属性。
为什么数组方法(推送,连接等)不能用于键/值对?
因为这就是规范所说的。
那么关联数组如何工作以及我们如何处理它(方法,属性等)。
如果需要字符串键,请使用普通对象而不是数组。
答案 1 :(得分:3)
JavaScript实际上没有关联数组。能够做myArray["foo"] = "bar"
是数组的副作用,只是对象和具有属性的对象。
只有数字属性才算作数组的元素。如果您myArray["foo"] = "bar"
向元素添加元素,则只需向对象添加属性即可。这与执行 添加元素的myArray[0] = "bar"
不同,因此会更新数组对象的length
属性。
答案 2 :(得分:0)
在JavaScript中,您不能使用字符串来处理数组元素,只能使用整数。所以,
1. var myArray = []; // undefined
2. myArray["name"] = "foo"; // "foo"
3. myArray.push("bar");
myArray
只会包含“bar”,因为它会忽略myArray["name"] = "foo";
,这就是为什么你得到长度为1。
答案 3 :(得分:0)
就像函数一样,数组也是对象。但是有许多Array原型函数故意不访问对象的属性。除了对象和数组之外,JavaScript中没有“关联数组”,具体取决于函数或代码的行为或利用与使用关联数组相同的方式。在迭代对象键/对与数组值时,您将在for循环中遇到同样的混淆。总的来说,尽管它们非常有效,但有一本名为Java Script的好书是很好的部分。然后,这也突出了要避免或危险的功能或“坏部分”。在Javascript中搜索对象和数组的尖锐边缘会产生一些好的读数。它们并不复杂,但您必须了解Java与JavaScript不同的更微妙的方式。
答案 4 :(得分:0)
Javascript中的数组并不意味着关联 - 当您通过键添加属性时,实际上是将其添加到数组对象,而不是数组本身。
如果您想要一个键:值对,use an Object