JavaScript数组:花括号 vs 方括号

121

以下各种数组定义有何区别?

var myArray = [];
var myArray = {};
var myArray = new Array();
2个回答

147

第一个和第三个等价,都会创建一个新的数组。第二个会创建一个新的空对象,而不是一个数组。

var myArray = []; //create a new array
var myArray = {}; //creates **a new empty object**
var myArray = new Array(); //create a new array

我们如何访问对象的值。 - Pinkie
3
使用括号或点符号表示法:myObject["someValue"]myObject.someValue。当然,由 {} 创建的空对象不会有这些属性,但你可以以同样的方式对它们进行赋值:myObject.someValue = "hello!" - johusman
4
在这个特定的情况下,1和3具有相同的效果。然而,有时它们的行为不同。例如,如果 var a = new Array(5)var b = [5],那么 ab(因为 a.length = 5 而 b.length = 1,a[0]undefinedb[0] 是 5,以此类推)。 - Hunan Rostomyan
var a;var a = {}; 是一样的吗? - RNA

31

var myObject = {}; 的等价写法是 var myObject = new Object();

因此,第二个示例不是一个 Array,而是一个普通的 Object

这可能会让人感到困惑,因为 Array 是一个类,Object 也是一个类 - 更准确地说,ArrayObject 的子类。因此,总体上,Object 的语义适用于 Array

var o = [];
o.push('element1');
o.push('element2');
o['property1'] = 'property value';  // define a custom property.
console.log(o.property1);
console.log(o.length);  // Outputs '2' as we've only push()'ed two elements onto the Array

2
property1 存储在哪里?它不是存储在数组中吗? - Pinkie
10
@Pinkie:现在有点混淆了:“数组也是对象”。通过执行 o['property1'] = 'property value',你实际上并没有向数组中添加元素,而是设置了数组对象的一个属性。感到困惑吗?我告诉过你啦 ;) 在JavaScript中,基本上所有的东西都是对象。其他对象,如ArrayRegExp等,通过进一步的功能扩展了基本对象。可以用花括号创建一个空的普通对象,例如plain_obj = {} - Felix Kling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接