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();

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

¿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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.