Tablice JavaScript nawiasy klamrowe a nawiasy

111

Jaka jest różnica między każdą z poniższych definicji tablic.

var myArray = [];
var myArray = {};
var myArray = new Array();
Mały palec u ręki
źródło

Odpowiedzi:

137

Pierwsza i trzecia są równoważne i tworzą nową tablicę. Drugi tworzy nowy pusty obiekt, a nie tablicę.

var myArray = []; //create a new array
var myArray = {}; //creates **a new empty object**
var myArray = new Array(); //create a new array
johusman
źródło
Jak uzyskujemy dostęp do wartości obiektu.
Pinkie,
3
W nawiasach lub notacji kropkowej: myObject["someValue"]lub myObject.someValue. Pusty obiekt stworzony przez {}will oczywiście nie ma tych właściwości, ale możesz je przypisać w ten sam sposób:myObject.someValue = "hello!"
johusman
4
W tym konkretnym przypadku 1 i 3 mają ten sam efekt. Czasami jednak zachowują się inaczej. Na przykład, jeśli var a = new Array(5)i var b = [5], to ab(ponieważ a.length= 5 while b.length= 1, a[0]to undefinedwhile b[0]to 5 itd.)
Hunan Rostomyan,
jest var a;i var a = {};to samo?
RNA
31

var myObject = {}; jest odpowiednikiem var myObject = new Object();

Tak więc drugi przykład nie jest Arrayogólnym, ale ogólnym Object.

Może to być mylące, ponieważ Arrayjest to klasa i Objectjest klasą - a dokładniej Arrayjest to podklasa Object. Tak więc, ogólnie rzecz biorąc, Objectsemantyka ma zastosowanie do 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
źródło
2
gdzie jest przechowywana właściwość1. Czy to nie jest w tablicy
Pinkie
9
@Pinkie: Teraz robi się to zagmatwane: tablice też są obiektami . W ten sposób o['property1'] = 'property value'nie dodajesz elementu do tablicy, ale ustawiasz właściwość obiektu tablicy . Zmieszany? Mówiłem ci;) W JavaScript w zasadzie wszystko jest obiektem. Inne obiekty, takie jak Array, RegExp... rozszerzają podstawowy obiekt o dodatkową funkcjonalność. Zostanie utworzony zwykły, pusty obiekt za pomocą nawiasów klamrowych plain_obj = {}.
Felix Kling