Каковы наилучшие методы при объявлении массива в Javascript?

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

var arr = new Array();

Но при тестировании онлайн, например, на jsbin, предупреждает меня: "Использовать литературную нотацию массива []."

Я не нашел причины, чтобы избежать использования конструктора. В чем-то менее эффективен, чем при использовании []? Или это плохая практика?

Есть ли веская причина использовать var arr = []; вместо var arr = new Array();?

Ответ 1

В основном люди используют var a = [], потому что Дуглас Крокфорд говорит так.

Его причины включают неинтуитивное и непоследовательное поведение new Array():

var a = new Array(5);     // an array pre-sized to 5 elements long
var b = new Array(5, 10); // an array with two elements in it

Обратите внимание, что нет пути с new Array() для создания массива с одним предварительно заданным элементом числа в нем!

Использование [] на самом деле более эффективно, и более безопасно! Можно перезаписать конструктор Array и заставить его делать нечетные вещи, но вы не можете перезаписать поведение [].

Лично я всегда использую синтаксис [] и аналогично всегда использую синтаксис {} вместо new Object().

Ответ 2

Одно существенное отличие состоит в том, что [] всегда будет создавать экземпляр нового массива, тогда как new Array может быть захвачен для создания другого объекта.

(function () {
    "use strict";
    var foo,
        bar;
    //don't do this, it a bad idea
    function Array() {
        alert('foo');
    }
    foo = new Array();
    bar = [];
}());​

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

Отказ от ответственности. Нехорошо заманить конструктор Array.

Ответ 3

для удобства обслуживания используйте []

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

для пустых массивов, используйте []

var ns = [];
var names = [ 'john', 'brian' ];

Как показано здесь, используя литерал для пустого, а несколько известных элементов - это жирный, чем конструктор Array.

для массива известного размера, используйте new Array(size)

Если размер известен, то использование конструктора Array значительно повышает производительность. Однако это также означает, что вам нужно иметь дело с массивом, который уже заполняет 'undefined' все значения.

Как показано здесь

// fill an array with 100 numbers
var ns = new Array( 100 );
for ( var i = 0; i < 100; i++ ) {
    ns[i] = i;
}

Это также работает для очень маленьких массивов.

Ответ 4

Нет, нет оснований использовать одну нотацию над другой для пустых массивов.

Однако большинство браузеров показывают немного лучшую производительность, используя x = [];, чем вызов конструктора.

Если вам нужно создать массив с определенным размером, вы можете использовать x = new Array(10);, например, чтобы создать массив с 10 undefined слотами.

Ответ 5

Оба правильны. Но большинство людей используют var a = []

Три способа объявления массива в JavaScript.

метод 1. Мы можем явно объявить массив с ключевым словом JavaScript для создания массива в памяти (т.е. создать его и сделать его доступным).

// Declare an array (using the array constructor)
var arlene1 = new Array();
var arlene2 = new Array("First element", "Second", "Last");

метод 2: мы используем альтернативный метод для объявления массивов.

// Declare an array (using literal notation)
var arlene1 = [];
var arlene2 = ["First element", "Second", "Last"];

метод 3. JavaScript также позволяет создавать массивы косвенно, вызывая определенные методы.

// Create an array from a method return value
var carter = "I-learn-JavaScript";
var arlene3 = carter.split("-");

Ответ 6

  • var arr = [] использует литерал массива/объекта
  • var arr = new Array() использовать конструктор array/object

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

var arr1 = new Array(1, 2, 3, 4);
var arr2 = [1, 2, 3, 4];

alert(arr1[0]); // 1
alert(arr2[0]); // 1

var arr3 = new Array(200);
var arr4 = [200];

alert(arr3[0]); // 'undefined'
alert(arr4[0]); // 200

Ответ 7

Существует ограничение, которое конструктор может принимать в качестве аргументов.

В большинстве систем я использовал ограничение 2 ^ 16 (2 байта):

var myFreshArr = new Array(0,1,2,3 ..... 65536);

Это приведет к ошибке (слишком много аргументов....)

При использовании литерала [] у вас нет таких проблем.

В случае, если вам не нужны такие большие массивы, я думаю, вы можете использовать все, что захотите.

Ответ 8

var array = [ 1, 2, 3, 4];

- сахар

var array = new Array(1, 2, 3, 4);

представляет собой соль

Ответ 9

Это потому, что new Array() неоднозначно. Это правильные конструкторы:

// Using brackets
[element0, element1, ..., elementN]

// Using new AND a list of elements
new Array(element0, element1, ..., elementN)

// Using new AND an integer specifying the array length
new Array(arrayLength)