Каковы лучшие практики, которым нужно следовать при объявлении массива в Javascript?
Когда мне нужно объявить новый массив, я использую эту запись
var arr = new Array();
Но при тестировании в Интернете, например, на jsbin, появляется предупреждение "Использовать буквенное обозначение массива []".
Я не нашел причины избегать использования конструктора. В некотором смысле менее эффективен, чем использование []
? Или это плохая практика?
Есть ли веская причина для использования var arr = [];
вместо var arr = new Array();
?
9 ответов
В основном люди используют 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()
,
Одно существенное отличие состоит в том, что []
всегда будет создавать экземпляр нового массива, тогда как new Array
может быть угнан для создания другого объекта.
(function () {
"use strict";
var foo,
bar;
//don't do this, it's a bad idea
function Array() {
alert('foo');
}
foo = new Array();
bar = [];
}());
В моем примере кода я сохранил Array
Функция скрыта от остальной части области документа, однако, более вероятно, что если вы когда-нибудь столкнетесь с такой проблемой, код не останется в хорошем закрытии, и, вероятно, будет трудно найти.
Отказ от ответственности: это не очень хорошая идея, чтобы угнать Array
конструктор.
для удобства использования используйте []
Литерал массива более предсказуем, поскольку большинство разработчиков используют его. Большая часть использования массива будет использовать литерал, и есть смысл в том, чтобы ваш код соответствовал тому, что используют другие разработчики.
для пустых массивов используйте []
var ns = [];
var names = [ 'john', 'brian' ];
Как показано здесь, использование литерала для пустого и нескольких известных элементов намного проще, чем конструктор Array.
для массива известного размера используйте new Array(size)
Если размер известен, то использование конструктора Array значительно повышает производительность. Однако это также означает, что вам приходится иметь дело с массивом, который уже имеет "неопределенный", заполняющий все его значения.
Как показано здесь
// fill an array with 100 numbers
var ns = new Array( 100 );
for ( var i = 0; i < 100; i++ ) {
ns[i] = i;
}
Это также работает для очень маленьких массивов.
Нет, на самом деле нет причин использовать одну нотацию над другой для пустых массивов.
Тем не менее, большинство браузеров показывают немного лучшую производительность при использовании x = [];
чем вызывать конструктор.
Если вам нужно создать массив с определенным размером, вам нужно использовать x = new Array(10);
например, который создал бы массив с 10 undefined
слоты.
- var arr=[] использует массив / объектный литерал
- var arr = new Array() использовать конструктор массива / объекта
Самый быстрый способ определить массив или объект - это буквальный способ, потому что вам не нужно вызывать конструктор
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
Оба верны только. Но большинство людей используют var a = []
Три способа объявить массив в JavaScript.
Метод 1: Мы можем явно объявить массив с ключевым словом JavaScript "new", чтобы создать экземпляр массива в памяти (т.е. создать его и сделать его доступным).
// 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's return value
var carter = "I-learn-JavaScript";
var arlene3 = carter.split("-");
Существует ограничение, которое конструктор может принимать в качестве аргументов.
На большинстве систем я допустил ограничение 2^16 (2 байта):
var myFreshArr = new Array(0,1,2,3 ..... 65536);
Это приведет к ошибке (слишком много аргументов....)
При использовании буквального [] у вас нет таких проблем.
Если вам не нужны такие большие массивы, я думаю, вы можете использовать все, что пожелаете.
var array = [ 1, 2, 3, 4];
это сахар
var array = new Array(1, 2, 3, 4);
это соль
Это потому что 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)