Создать пустой объект в JavaScript с помощью {} или new Object ()?


здесь два разных способы создания пустого объекта в JavaScript:

var objectA = {}
var objectB = new Object()

есть ли разница в том, как движок скрипт обрабатывает их? Есть ли причина использовать один над другим?

аналогично можно также создать пустой массив, используя другой синтаксис:

var arrayA = []
var arrayB = new Array()
9 328

9 ответов:

объекты

нет никакой пользы в использовании new Object(); -- а {}; может сделать ваш код более компактным, и более читаемым.

для определения пустых объектов, они технически одинаковы. Элемент {} синтаксис короче, аккуратнее (меньше Java-ish), и позволяет мгновенно заполнить объект inline-like так:

var myObject = {
        title:  'Frog',
        url:    '/img/picture.jpg',
        width:  300,
        height: 200
      };

массивы

для массивов аналогично почти нет пользы от использования new Array(); over []; -- С одной незначительное исключение:

var emptyArray = new Array(100);

создает массив длиной 100 элементов со всеми слотами, содержащими undefined -- что может быть приятно/полезно в определенных ситуациях (например,(new Array(9)).join('Na-Na ') + 'Batman!').

моя рекомендация

  1. никогда не используйте new Object(); -- это неуклюже, чем "{} " и выглядит глупо.
  2. всегда использовать []; -- за исключением случаев, когда вам нужно быстро создать "пустой" массив с предопределенной длиной.

Да, есть разница, они не одинаковые. Это правда, что вы получите те же результаты, но двигатель работает по-другому для них обоих. Один из них-это литерал объекта, а другой конструктор, два разных способа создания объекта в JavaScript.

var objectA = {} //This is an object literal

var objectB = new Object() //This is the object constructor

в JS все является объектом, но вы должны знать о следующей вещи с новым объектом (): он может получить параметр, и в зависимости от этого параметра он создаст строку, число, или просто пустой объект.

например: new Object(1), вернет число. new Object("hello") вернет строку, это означает, что конструктор объекта может делегировать-в зависимости от параметра - создание объекта другим конструкторам, таким как string, number и т. д... Это очень важно иметь в виду, когда вы управляете динамическими данными для создания объектов..

многие авторы рекомендуют не использовать конструктор объектов, когда можно использовать определенный литерал вместо этого, где вы будете уверены, что то, что вы создаете, это то, что вы ожидаете иметь в своем коде.

Я предлагаю вам сделать дальнейшее чтение о различиях между буквенными обозначениями и конструкторами на javascript, чтобы найти более подробную информацию.

они имеют тот же конечный результат, но я бы просто добавил, что использование синтаксиса литерала может помочь привыкнуть к синтаксису JSON (строковое подмножество синтаксиса объекта литерала JavaScript), поэтому это может быть хорошей практикой.

еще одна вещь: у вас могут быть тонкие ошибки, если вы забудете использовать new оператора. Таким образом, использование литералов поможет вам избежать этой проблемы.

в конечном счете, это будет зависеть от ситуации, а также предпочтение.

объект и массив литеральный синтаксис {} / [] был введен в JavaScript 1.2, поэтому он недоступен (и приведет к синтаксической ошибке) в версиях Netscape Navigator до 4.0.

мои пальцы по-прежнему по умолчанию говорят новый массив(), но я очень старый человек. К счастью, Netscape 3 не является браузером, который многие люди когда-либо должны рассматривать сегодня...

var objectA = {}

намного быстрее и, по моему опыту, чаще используется, так что лучше принять "стандарт" и немного упростить.

Я считаю {} было рекомендовано в одном из видео Javascript на здесь как хорошая конвенция кодирования. new необходим для псевдоклассического наследования. элемент var obj = {}; way помогает напомнить вам, что это не классический объектно-ориентированный язык, а прототипный. Таким образом, только время вам действительно нужно new - это когда вы используете функции конструкторов. Например:

var Mammal = function (name) {
  this.name = name;
};

Mammal.prototype.get_name = function () {
  return this.name;
}

Mammal.prototype.says = function() {
  return this.saying || '';
}

тогда он используется так:

var aMammal = new Mammal('Me warm-blooded');
var name = aMammal.get_name();

другой преимущество использования {} Как противостоять 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() занимает больше места.

Это по сути одно и то же. Используйте все, что вы найдете более удобным.

ОК, есть только 2 различных способа сделать то же самое! Один называется object literal а другой-это функция constructor!

но читайте дальше, есть несколько вещей, которые я хотел бы поделиться:

используя {} делает ваш код более читаемым, при создании экземпляров Object или другие встроенные функции не рекомендуется...

кроме того, функция объекта получает параметры, поскольку это функция, например Object(params)... но {} чистый способ запустить объект в JavaScript...

использование объектного литерала делает ваш код намного чище и проще для чтения другими разработчиками, и он встроен в лучшие практики в JavaScript...

в то время как объект в Javascript может быть почти что угодно, {} только указывает на объекты javascript, для теста, как это работает, сделайте ниже в своем коде javascript или консоли:

var n = new Object(1); //Number {[[PrimitiveValue]]: 1}

Удивительно, но это создает число!

var a = new Object([1,2,3]); //[1, 2, 3]

и это создание массива!

var s = new Object('alireza'); //String {0: "a", 1: "l", 2: "i", 3: "r", 4: "e", 5: "z", 6: "a", length: 7, [[PrimitiveValue]]: "alireza"}

и этот странный результат для String!

поэтому, если вы создаете объект, рекомендуется использовать объектный литерал, иметь стандартный код и избегать любой аварии кода, как указано выше, а также использовать производительность с помощью {} лучше в моем опыте!