Arreglos de JavaScript llaves vs corchetes

111

¿Cuál es la diferencia entre cada una de las siguientes definiciones de matriz?

var myArray = [];
var myArray = {};
var myArray = new Array();
Dedo meñique
fuente

Respuestas:

137

El primero y el tercero son equivalentes y crean una nueva matriz. El segundo crea un nuevo objeto vacío, no una matriz.

var myArray = []; //create a new array
var myArray = {}; //creates **a new empty object**
var myArray = new Array(); //create a new array
johusman
fuente
¿Cómo accedemos a los valores del objeto?
Pinkie
3
Con corchetes o notación de puntos: myObject["someValue"]o myObject.someValue. El objeto vacío creado por {}, por supuesto, no tendrá esas propiedades, pero puede asignarles de la misma manera:myObject.someValue = "hello!"
johusman
4
En este caso particular, 1 y 3 tienen el mismo efecto. A veces, sin embargo, se comportan de manera diferente. Por ejemplo, si var a = new Array(5)y var b = [5], entonces ab(ya que a.length= 5 while b.length= 1, a[0]es undefinedwhile b[0]es 5, y así sucesivamente.)
Hunan Rostomyan
es var a;y var a = {};lo mismo?
ARN
31

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

Entonces, el segundo ejemplo no es Arraygeneral, sino general Object.

Esto puede resultar confuso ya que Arrayes una clase y Objectes una clase; más precisamente, Arrayes una subclase de Object. Entonces, en general, la Objectsemántica es aplicable 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
fuente
2
donde se almacena property1. ¿No está en la matriz
Pinkie
9
@Pinkie: Esto se está volviendo confuso ahora: las matrices también son objetos . Al hacerlo o['property1'] = 'property value', en realidad no está agregando un elemento a la matriz, sino configurando una propiedad del objeto de matriz . ¿Confuso? Ya te lo dije;) En JavaScript, básicamente todo es un objeto. Otros objetos, como Array, RegExp, ... ampliar el objeto básico con mayor funcionalidad. Se crea un objeto simple y vacío con las llaves plain_obj = {}.
Felix Kling