JavaScript масиви дужки проти дужок


111

Яка різниця між кожним із наведених нижче визначень масиву.

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

Відповіді:


137

Перший і третій еквівалентні і створюють новий масив. Другий створює новий порожній об’єкт, а не масив.

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

Як ми отримуємо доступ до значень об’єкта.
Пінкі

3
З дужками або позначеннями крапок: myObject["someValue"]або myObject.someValue. Порожній об’єкт, створений {}волею, звичайно, не матиме цих властивостей, але ви можете призначити їм таким же чином:myObject.someValue = "hello!"
johusman

4
У цьому конкретному випадку 1 і 3 мають однаковий ефект. Однак іноді вони поводяться інакше. Наприклад, якщо var a = new Array(5)і var b = [5], тоді ab(оскільки a.length= 5, хоча b.length= 1, a[0]є, undefinedпоки b[0]є 5, і т.
Д.

є var a;і var a = {};те саме?
РНК

31

var myObject = {}; еквівалентний вар myObject = new Object();

Отже, другий приклад - не загальний, Arrayа загальний Object.

Це може заплутатись як Arrayклас, так і Objectклас - точніше Arrayце підклас Object. Отже, Objectсемантика за великим рахунком застосовна для 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
де зберігається property1 Хіба це не в масиві
Пінкі

9
@Pinkie: Це зараз стає заплутаним: масиви теж об’єкти . Тим самим o['property1'] = 'property value'ви фактично не додаєте елемент до масиву, а встановлюєте властивість об’єкта масиву . Плутати? Я сказав вам;) У JavaScript в основному все є об'єктом. Інші об'єкти, такі як Array, RegExp..., розширюють основний об'єкт з подальшою функціональністю. Простий, порожній об’єкт створюється ним за допомогою фігурних дужок plain_obj = {}.
Фелікс Клінг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.