JavaScript-Arrays Klammern gegen Klammern

110

Was ist der Unterschied zwischen den folgenden Array-Definitionen?

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

Antworten:

137

Das erste und das dritte sind äquivalent und erstellen ein neues Array. Der zweite erstellt ein neues leeres Objekt, kein Array.

var myArray = []; //create a new array
var myArray = {}; //creates **a new empty object**
var myArray = new Array(); //create a new array
johusman
quelle
Wie greifen wir auf Werte des Objekts zu?
Pinkie
3
Mit Klammern oder Punktnotation: myObject["someValue"]oder myObject.someValue. Das leere Objekt, das von {}will erstellt wird, hat natürlich nicht diese Eigenschaften, aber Sie können sie auf die gleiche Weise zuweisen:myObject.someValue = "hello!"
johusman
4
In diesem speziellen Fall haben 1 und 3 den gleichen Effekt. Manchmal verhalten sie sich jedoch anders. Zum Beispiel, wenn var a = new Array(5)und var b = [5], dann ab(da a.length= 5 während b.length= 1, a[0]ist undefinedwährend b[0]5 ist und so weiter.)
Hunan Rostomyan
ist var a;und var a = {};das gleiche?
RNA
31

var myObject = {}; ist äquivalent zu var myObject = new Object();

Das zweite Beispiel ist also kein Arrayallgemeines Object.

Dies kann verwirrend werden, ebenso Arraywie eine Klasse und Objecteine Klasse - genauer gesagt Arrayeine Unterklasse von Object. Im Großen und Ganzen ist die ObjectSemantik also anwendbar auf 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
quelle
2
wo ist property1 gespeichert. Ist es nicht in der Reihe
Pinkie
9
@Pinkie: Das wird jetzt verwirrend: Arrays sind auch Objekte . Auf diese Weise o['property1'] = 'property value'fügen Sie dem Array kein Element hinzu, sondern legen eine Eigenschaft des Array-Objekts fest . Verwirrt? Ich habe es dir gesagt;) In JavaScript ist im Grunde alles ein Objekt. Andere Aufgaben, wie Array, RegExp... erweitern das Basisobjekt mit weiteren Funktionen. Ein einfaches, leeres Objekt wird mit den geschweiften Klammern erstellt plain_obj = {}.
Felix Kling