Вопрос

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

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

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

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

var arrayA = []
var arrayB = new Array()
Это было полезно?

Решение

Объекты

Использование 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 -На ') +' Бэтмен! ').

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

<Ол>
  • Никогда не используйте new Object (); - он более грубый, чем "{}" и выглядит глупо.
  • Всегда используйте []; - за исключением случаев, когда вам нужно быстро создать " пустой " массив с заданной длиной.
  • Другие советы

    Да, есть разница, они не одинаковы. Это правда, что вы получите те же результаты, но двигатель работает по-разному для них обоих. Один из них является литералом объекта, а другой - конструктором, двумя различными способами создания объекта в 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, чтобы найти больше деталей.

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

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

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

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

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

    var objectA = {}
    

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

    Я полагаю, {} было рекомендовано в одном из видео-роликов Javascript на здесь. как хорошее соглашение по кодированию. 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.

    Производительность создания массива

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

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

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

    var arr = new Array (x); быстрее, чем var arr = []; arr [x-1] = не определено ;

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

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

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

    ОК , есть только 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 !

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top