Arrays JavaScript accolades et crochets

111

Quelle est la différence entre chacune des définitions de tableau suivantes.

var myArray = [];
var myArray = {};
var myArray = new Array();
Auriculaire
la source

Réponses:

137

Le premier et le troisième sont équivalents et créent un nouveau tableau. Le second crée un nouvel objet vide, pas un tableau.

var myArray = []; //create a new array
var myArray = {}; //creates **a new empty object**
var myArray = new Array(); //create a new array
johusman
la source
Comment accéder aux valeurs de l'objet.
Pinkie
3
Avec des crochets ou une notation par points: myObject["someValue"]ou myObject.someValue. L'objet vide créé par {}ne possède bien sûr pas ces propriétés, mais vous pouvez leur attribuer de la même manière:myObject.someValue = "hello!"
johusman
4
Dans ce cas particulier 1 et 3 ont le même effet. Parfois, cependant, ils se comportent différemment. Par exemple, si var a = new Array(5)et var b = [5], alors ab(puisque a.length= 5 while b.length= 1, a[0]est undefinedwhile b[0]est 5, et ainsi de suite.)
Hunan Rostomyan
est var a;et var a = {};le même?
RNA
31

var myObject = {}; équivaut à var myObject = new Object();

Ainsi, le deuxième exemple n'est pas un Arraymais un général Object.

Cela peut prêter à confusion car Arrayune classe et Objectune classe - plus précisément Arrayune sous-classe de Object. Donc, dans l'ensemble, la Objectsémantique est applicable à un 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
la source
2
où est stockée property1. N'est-ce pas dans le tableau
Pinkie
9
@Pinkie: Cela devient déroutant maintenant: les tableaux sont aussi des objets . Ce faisant o['property1'] = 'property value', vous n'ajoutez pas réellement un élément au tableau, mais définissez une propriété de l' objet tableau . Confus? Je te l'ai dit;) En JavaScript, fondamentalement, tout est un objet. D' autres objets, comme Array, RegExp... étendent l'objet de base avec des fonctionnalités supplémentaires. Un objet simple et vide est créé avec les accolades plain_obj = {}.
Felix Kling