Есть два разных способа создания пустого объекта в JavaScript:
var objectA = {}
var objectB = new Object()
Есть ли разница в том, как обработчик скриптов обрабатывает их? Есть ли причина использовать один над другим?
Точно так же возможно создать пустой массив, используя другой синтаксис:
var arrayA = []
var arrayB = new Array()
javascript
arrays
object
javascript-objects
new-operator
Йонас Пегерфальк
источник
источник
var objectA = {} var objectB = new Object()
третьей существует конструкция, которая даст тот же результат:var objectC = Object.create(Object.prototype);
{}
и[]
использовать{}
вместоnew Object()
. Используйте[]
вместоnew Array()
. Используйте массивы, когда имена членов будут последовательными целыми числами. Используйте объекты, когда имена членов являются произвольными строками или именами. источникnew Object()
и{}
не совсем пустые объекты, это объекты с прототипом Object.prototype. Вы можете использоватьObject.create(null)
для действительно пустого объекта (по крайней мере, в соответствии с документамиОтветы:
Объекты
Нет пользы в использовании
new Object();
- тогда как{};
ваш код может быть более компактным и более читабельным.Для определения пустых объектов они технически одинаковы.
{}
Синтаксис короче, аккуратнее (менее Java-МОГ), и позволяет мгновенно заполнить инлайн - например , так:Массивы
Для массивов аналогичным образом практически невозможно использовать
new Array();
over[];
- с одним небольшим исключением:создает массив из 100 элементов, содержащий все слоты,
undefined
что может быть полезно / полезно в определенных ситуациях (например,(new Array(9)).join('Na-Na ') + 'Batman!'
).Моя рекомендация
new Object();
- он более грубый{};
и выглядит глупо.[];
- кроме случаев, когда вам нужно быстро создать «пустой» массив с заранее определенной длиной.источник
new Array(100)
. Прочитайте литературу: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…[]
. Там нет аргументов. Вы, однако, утверждали, чтоnew Array(100)
это как-то «неверно», что не соответствует действительности.new Array(1,2,3)
приводит к[1,2,3]
, ноnew Array(1)
это не приводит к[1]
; таким образом, семантикаArray
противоречива и неоправданна.Object.create(null)
может быть полезно для создания пустого объекта, тогда как{ }
наследуется от прототипа Object.Да, есть разница, они не одинаковы. Это правда, что вы получите те же результаты, но двигатель работает по-разному для них обоих. Один из них является литералом объекта, а другой - конструктором, двумя различными способами создания объекта в javascript.
В JS все является объектом, но вы должны знать о следующей вещи с новым Object (): он может получить параметр, и в зависимости от этого параметра он создаст строку, число или просто пустой объект.
Например:,
new Object(1)
вернет номер.new Object("hello")
вернет строку, это означает, что конструктор объекта может делегировать (в зависимости от параметра) создание объекта другим конструкторам, таким как строка, число и т. д. Очень важно помнить об этом, когда вы управляете динамическими данными создавать объекты ..Многие авторы рекомендуют не использовать конструктор объектов, если вместо этого вы можете использовать определенные литеральные обозначения, когда вы будете уверены, что то, что вы создаете, это то, что вы ожидаете иметь в своем коде.
Я предлагаю вам продолжить чтение различий между буквенными обозначениями и конструкторами в javascript, чтобы найти больше деталей.
источник
У них один и тот же конечный результат, но я бы просто добавил, что использование литерального синтаксиса может помочь привыкнуть к синтаксису JSON (строковое подмножество синтаксиса литеральных объектов JavaScript), так что это может быть хорошей практикой ,
Еще одна вещь: у вас могут быть тонкие ошибки, если вы забудете использовать
new
оператор. Таким образом, использование литералов поможет вам избежать этой проблемы.В конечном итоге это будет зависеть как от ситуации, так и от предпочтений.
источник
Литеральный синтаксис объекта и массива {} / [] был введен в JavaScript 1.2, поэтому он недоступен (и приведет к синтаксической ошибке) в версиях Netscape Navigator до 4.0.
Мои пальцы все еще по умолчанию говорят новое Array (), но я очень старый человек. К счастью, Netscape 3 - это не браузер, который многие люди сегодня должны учитывать ...
источник
это намного быстрее и, по моему опыту, более широко используется, поэтому, вероятно, лучше всего принять «стандарт» и сэкономить немного печати.
источник
new Object
должны выполняться во время выполнения.Я полагаю, что это
{}
было рекомендовано в одном из видеороликов Javascript здесь как хорошее соглашение по кодированию.new
необходим для псевдоклассического наследования.var obj = {};
способ помогает напомнить вам , что это не классический объектно - ориентированный язык , а прототипичный один. Таким образом, единственное время, которое вам действительно нужно,new
это когда вы используете функции конструкторов. Например:Тогда это используется так:
Еще одно преимущество использования
{}
в противоположность тому,new Object
что вы можете использовать его для создания литералов объектов в стиле JSON.источник
Производительность массива
Если вы хотите создать массив без длины:
var arr = [];
быстрее чемvar arr = new Array();
Если вы хотите создать пустой массив определенной длины:
var arr = new Array(x);
быстрее чемvar arr = []; arr[x-1] = undefined
;Для тестов нажмите следующее: https://jsfiddle.net/basickarl/ktbbry5b/
Я, однако, не знаю, сколько памяти
new Array()
занимает оба, я могу себе представить, что занимает больше места.источник
arr = new Array(x)
эквивалентноarr = []; arr.length = x;
, а не присвоениюx-1
индекса сundefined
.Это по сути то же самое. Используйте то, что вы считаете более удобным.
источник
Object
равно NULL, а {proto}{}
является 'Object.prototype'?Object
null, это правильно. Это потому, чтоObject
заканчивается цепочка прототипов. Однако экземпляры объектов не имеют прототипа, только конструкторы имеют его. И(new Object()).constructor === ({}).constructor
->true
new Object()
выдает пустой экземпляр объекта.{}
дает пустой экземпляр объекта. Оба эти случая абсолютно неразличимы. Пример, на который вы ссылаетесь, делает что-то еще (он изменяет цепочку прототипов) и на самом деле не применяется здесь - или я не понимаю ваш аргумент.ОК , есть только 2 разных способа сделать то же самое! Один
object literal
вызывается, а другой - функцияconstructor
!Но продолжайте читать, есть несколько вещей, которыми я хотел бы поделиться:
Использование
{}
делает ваш код более читабельным, а создание экземпляровObject
или других встроенных функций не рекомендуется ...Кроме того, функция Object получает параметры, так как это функция, как
Object(params)
... но{}
это чистый способ запустить объект в JavaScript ...Использование объектного литерала делает ваш код более понятным и удобным для чтения другими разработчиками, а также соответствует рекомендациям по JavaScript ...
В то время как Object в Javascript может быть почти чем угодно, он
{}
указывает только на объекты javascript, чтобы проверить, как он работает, выполните ниже в вашем коде javascript или консоли:Удивительно, но это создает номер!
И это создает массив!
и этот странный результат для
String
!Так что, если вы создаете объект, рекомендуется использовать литерал объекта, иметь стандартный код и избегать любых ошибок кода, как описано выше, также,
{}
по моему опыту, использование с точки зрения производительности лучше!источник