Arrays JavaScript chaves vs colchetes

111

Qual é a diferença entre cada uma das seguintes definições de array.

var myArray = [];
var myArray = {};
var myArray = new Array();
Pinkie
fonte

Respostas:

137

O primeiro e o terceiro são equivalentes e criam uma nova matriz. O segundo cria um novo objeto vazio, não uma matriz.

var myArray = []; //create a new array
var myArray = {}; //creates **a new empty object**
var myArray = new Array(); //create a new array
johusman
fonte
Como acessamos os valores do objeto.
Pinkie
3
Com colchetes ou notação de ponto: myObject["someValue"]ou myObject.someValue. O objeto vazio criado por {}certamente não terá essas propriedades, mas você pode atribuir a eles da mesma maneira:myObject.someValue = "hello!"
johusman
4
Neste caso particular, 1 e 3 têm o mesmo efeito. Às vezes, porém, eles se comportam de maneira diferente. Por exemplo, se var a = new Array(5)e var b = [5], então ab(visto que a.length= 5 enquanto b.length= 1, a[0]é undefinedenquanto b[0]é 5 e assim por diante.)
Hunan Rostomyan
é var a;e var a = {};o mesmo?
RNA
31

var myObject = {}; é equivalente a var myObject = new Object();

Portanto, o segundo exemplo não é um, Arraymas um geral Object.

Isso pode ficar confuso, pois Arrayé uma classe e Objecté uma classe - mais precisamente Arrayé uma subclasse de Object. Portanto, em geral, a Objectsemântica é aplicável a 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
leepowers
fonte
2
onde a propriedade1 está armazenada. Não está na matriz
Pinkie
9
@Pinkie: Isso está ficando confuso agora: os arrays também são objetos . Ao fazer isso o['property1'] = 'property value', você não está realmente adicionando um elemento à matriz, mas definindo uma propriedade do objeto da matriz . Confuso? Eu te disse;) Em JavaScript, basicamente tudo é um objeto. Outros objetos, como Array, RegExp... estendem o objeto básico com funcionalidade adicional. Um objeto simples e vazio é criado com as chaves plain_obj = {}.
Felix Kling