Скобки массивов 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
Johusman
источник
Как мы получаем доступ к значениям объекта.
Пинки
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 = {};то же самое?
RNA
31

var myObject = {}; эквивалентно var 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
leepowers
источник
2
где хранится свойство1. Разве это не в массиве?
Пинки
9
@Pinkie: Теперь это сбивает с толку: массивы тоже являются объектами . Тем самым o['property1'] = 'property value'вы фактически не добавляете элемент в массив, а устанавливаете свойство объекта массива . Смущенный? Я сказал тебе;) В JavaScript в основном все является объектом. Другие объекты, как Array, RegExp... расширить базовый объект с дополнительной функциональностью. Простой пустой объект создается с помощью фигурных скобок plain_obj = {}.
Феликс Клинг,