Что такое нотация литерала массивов в JavaScript и когда необходимо использовать его?

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

А лучшее решение этого вида проблемы Дизайн Контракта , или через встроенные конструкции языка, или через библиотеку. DbC предложил бы предварительно проверить любые входящие аргументы в пользу метода для данных из диапазона (т.е.: Пустой указатель) и выдавание исключения, потому что метод не будет работать с неправильными данными.

[Редактирование для соответствия редактированию вопроса:]

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

public class NullPointerExample {
  public static void Main()
  {
    Object foo;
    System.Console.WriteLine( foo.ToString() );
  }
}

при выполнении этого это собирается бросить NRE на строку 5, когда это пыталось оценить ToString () метод на нечто. Нет никаких объектов отладить, только неинициализированная ссылка на объект (нечто). Существует класс и метод, но никакой объект.

Ре: Chris Marasti-Georg's ответ :

Вы никогда не должны бросать NRE сами - это - системное исключение с определенным значением: CLR (или JVM) попытался оценить ссылку на объект, которая не была инициализирована. Если Вы предварительно проверите ссылку на объект, то или выдать своего рода исключение недействительного аргумента или специализированное исключение, но не NRE, потому что Вы только смутите следующего программиста, который должен поддержать Ваше приложение.

65
задан Purag 3 March 2012 в 22:09
поделиться

2 ответа

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

var myArray = [];

Это «новый» способ определения массивов, и я полагаю, что он короче / чище.

Примеры ниже объясняют разницу между ними:

var a = [],            // these are the same
    b = new Array(),   // a and b are arrays with length 0

    c = ['foo', 'bar'],           // these are the same
    d = new Array('foo', 'bar'),  // c and d are arrays with 2 strings

    // these are different:
    e = [3],             // e.length == 1, e[0] == 3
    f = new Array(3);   // f.length == 3, f[0] == undefined

Ссылка : В чем разница между «Array ()» и «[]» при объявлении массива JavaScript?

94
ответ дан 24 November 2019 в 15:25
поделиться

См. Также: Что не так с var x = new Array ();

Помимо аргумента Крокфорда, я считаю, что это также связано с тем, что другие языки имеют похожие структуры данных, которые используют один и тот же синтаксис; например, Python имеет списки и словари ; см. следующие примеры:

// this is a Python list
a = [66.25, 333, 333, 1, 1234.5]

// this is a Python dictionary
tel = {'jack': 4098, 'sape': 4139}

Разве не здорово, что Python также грамматически корректирует Javascript? (да, конечные точки с запятой отсутствуют, но они также не требуются для Javascript)

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

23
ответ дан 24 November 2019 в 15:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: