it-swarm.com.ru

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

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

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

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

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

var arrayA = []
var arrayB = new Array()
343
Jonas Pegerfalk

Объекты

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

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

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

Массивы

Для массивов практически невозможно использовать new Array(); по сравнению с []; - с одним небольшим исключением:

var emptyArray = new Array(100);

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

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

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

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

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

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

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

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

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

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

85
Guillermo Snipe

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

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

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

11
Jason Bunting

Результат массива

Если вы хотите создать массив без длины:

var arr = []; БЫСТРЕЕ, ЧЕМ var arr = new Array();

Если вы хотите создать пустой массив определенной длины:

var arr = new Array(x); быстрее, чем var arr = []; arr[x-1] = undefined;

Для тестов нажмите следующее: https://jsfiddle.net/basickarl/ktbbry5b/

Тем не менее, я не знаю, сколько занимает память, я могу представить, что new Array() занимает больше места.

7
Karl Morrison

Я считаю, что {} был рекомендован в одном из Javascript vids на здесь как хорошее соглашение о кодировании. new необходим для псевдоклассического наследования. способ var obj = {}; помогает напомнить вам, что это не классический объектно-ориентированный язык, а прототипный. Таким образом, единственное время, когда вам действительно нужно 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.

7
Thedric Walker
var objectA = {}

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

7
Bobby Jack

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

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

7
bobince

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

2
Tomalak

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

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

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

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

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

Хотя Object в 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!

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

1
Alireza