JavaScript dizileri parantez ve parantez


111

Aşağıdaki dizi tanımlarının her biri arasındaki fark nedir?

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

Yanıtlar:


137

Birinci ve üçüncü eşdeğerdir ve yeni bir dizi oluşturur. İkincisi, bir dizi değil, yeni bir boş nesne oluşturur.

var myArray = []; //create a new array
var myArray = {}; //creates **a new empty object**
var myArray = new Array(); //create a new array

Nesnenin değerlerine nasıl erişiriz?
Pinkie

3
Parantez veya noktalı gösterimle: myObject["someValue"]veya myObject.someValue. {}Will tarafından oluşturulan boş nesne elbette bu özelliklere sahip değildir, ancak onlara aynı şekilde atayabilirsiniz:myObject.someValue = "hello!"
johusman

4
Bu özel durumda 1 ve 3 aynı etkiye sahiptir. Ancak bazen farklı davranırlar. Örneğin, var a = new Array(5)ve var b = [5]daha sonra ab(Beri a.length= 5 ise b.length= 1, a[0]bir undefinedsüre b[0]ile, yani 5, ve.)
Hunan Rostomyan

olduğu var a;ve var a = {};aynı?
RNA

31

var myObject = {}; var ile eşdeğerdir myObject = new Object();

Yani, ikinci örnek Arraybir genel değil Object.

Bu Array, bir sınıf ve bir sınıf olduğu için kafa karıştırıcı olabilir Object- daha doğrusu Arraybir alt sınıfıdır Object. Dolayısıyla, Objectgenel olarak anlambilim aşağıdakilere uygulanabilir 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
özellik1 nerede saklanır. Dizide değil mi
Pinkie

9
@Pinkie: Bu şimdi kafa karıştırıcı hale geliyor: Diziler de nesneler . Bunu yaparak o['property1'] = 'property value', aslında diziye bir öğe eklemiyorsunuz, ancak dizi nesnesinin bir özelliğini ayarlıyorsunuz . Şaşkın? Size söyledim;) JavaScript'te temelde her şey bir nesnedir. Diğer nesneler gibi Array, RegExp... daha fazla işlevselliğe sahip temel nesneyi uzanır. Küme parantezleri ile düz, boş bir nesne oluşturulur plain_obj = {}.
Felix Kling
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.