Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在这种情况下,我应该使用花括号{}还是方括号[]?_Javascript_Arrays - Fatal编程技术网

Javascript 在这种情况下,我应该使用花括号{}还是方括号[]?

Javascript 在这种情况下,我应该使用花括号{}还是方括号[]?,javascript,arrays,Javascript,Arrays,目前我有一个使用递增索引的数组: var idx = 1; var a = []; a[idx++] = "apple"; a[idx++] = "orange"; ... console.log(a[2]); 并且只通过[]访问它,而不使用特定于数组的函数,如长度,索引 显然,在这种情况下,以下内容也起作用: var a = {}; 那么,在这种情况下,我应该选择哪一个呢?例如,它们之间的任何性能差异?[]表示一个数组。数组仅包含以下值: var a1 = [1, 2, 3, 4] 正如

目前我有一个使用递增索引的数组:

var idx = 1;
var a = [];
a[idx++] = "apple";
a[idx++] = "orange";
...
console.log(a[2]);
并且只通过
[]
访问它,而不使用特定于数组的函数,如
长度
索引

显然,在这种情况下,以下内容也起作用:

var a = {};

那么,在这种情况下,我应该选择哪一个呢?例如,它们之间的任何性能差异?

[]表示一个数组。数组仅包含以下值:

var a1 = [1, 2, 3, 4]
正如@Qantas指出的,数组可以容纳的不仅仅是值。一个数组甚至可以包含另一个数组和/或对象:

var a2 = [1, 2, ["apple", "orange"], {one: "grape", two: "banana"}];
{}表示一个对象。对象具有键值对,如

var a3 = {one: 1, two: 2}
在您的情况下,这实际上是一个您希望如何访问数据的问题。如果你只想知道“苹果”、“梨”等等,那就使用数组吧。您可以通过它的索引访问它

a1[0]; // outputs 1
a1[1]; // outputs 2
或者,您可以使用循环对其进行迭代。如果您使用花括号,(根据我给出的示例),您可以使用

a3.one; // outputs 1
a3["two"]; // outputs 2

在这种情况下,如何使其最适合您的需要,完全取决于您。有关更广泛的讨论,请参见。

不同之处在于使用方括号将创建数组对象,而使用花括号将创建普通对象。例如:

a = [];
a[1] = 'a';

b = {};
b[1] = 'b';

a.length; // returns 2
b.length; // is undefined

a.push('z'); // add 'z' to the end of a
b.push('z'); // generates an error - undefined is not a function
             // because plain objects don't have a push method

阅读有关阵列对象的MDN文档以了解有关阵列的更多信息:

取决于您拥有的数据以及您想对其执行的操作。如果你只是有一个“列表”的东西,使用一个数组。阵列可能也通过引擎进行了优化。谢谢@FelixKling,这就是我想知道的。不知道为什么会有这么多的反对票…@FelixKling尽管从内存来看,大多数JS实现也会针对类似数组的对象进行优化,所以它们实际上具有类似的性能。但是,不确定这是否适用于此实例,因为第一个元素是
1
,而不是
0
@Deqing:可能是因为“这个符号是什么意思?”这个问题缺乏研究工作,所以您可以在每个基础教程(或通过搜索StackOverflow)中找到对象/数组文字。问一个问题“我应该为任务XY使用数组还是对象?”@Qantas94Heavy:那很可能!我最近进行了几次测试,发现chrome在处理大型数组和对象时,至少在使用和使用连续键时存在差异。但这对节点没有任何影响。我只是想象chrome不能用像这样的对象来隐藏类。我不太熟悉优化,所以我甚至不应该提到它。但是现在已经太迟了:)JavaScript中的数组构建在对象上,还可以像对象一样存储键值对,所以这并不能真正回答问题。据我所知,OP询问使用数组这样的对象是否是一个好主意。好吧,也许我不应该说它是一个
数组
。我只是想知道在我的例子中使用
{}
是否有什么不同。