Инициализировать массив без ключевого слова `new` в javascript [duplicate]

Это означает, что ваш код использовал ссылочную переменную объекта, которая была установлена ​​в нуль (т. е. она не ссылалась на экземпляр фактического объекта).

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

if (myvar != null)
{
    // Go ahead and use myvar
    myvar.property = ...
}
else
{
    // Whoops! myvar is null and cannot be used without first
    // assigning it to an instance reference
    // Attempting to use myvar here will result in NullReferenceException
}
35
задан alex 29 April 2011 в 03:00
поделиться

3 ответа

С Array оба эквивалентны. new вводится, когда он вызывается как функция:

15.4.1 Конструктор Array, вызываемый как функция

Когда Array вызывается как а не как конструктор, он создает и инициализирует новый объект Array. Таким образом, вызов функции Array(…) эквивалентен выражению создания объекта new Array(…) с теми же аргументами.

Из ECMA-262, 3-е издание (со схожими в 5th Edition ).

33
ответ дан Jonathan Lonowski 25 August 2018 в 09:40
поделиться

Согласно Javascript: The Definitive Guide (5th Edition), стр. 602: «Когда конструктор Array() вызывается как функция, без оператора new он ведет себя точно так же, как и при вызове с new.

5
ответ дан Brigham 25 August 2018 в 09:40
поделиться

Разница заключается в реализации функции Array. Является ли вызов массива без нового оператора возвратом экземпляра массива или нет, зависит от реализации. Например, движок SpiderMonkey Mozilla делает это:

static JSBool
Array(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
     jsuint length;
     jsval *vector;

     /* If called without new, replace obj with a new Array object. */

Это фактический комментарий от фактического источника. Следующие строки кода здесь не воспроизводятся. Я бы предположил, что другие двигатели делают то же самое. В противном случае поведение не определено. Хорошее чтение на эту тему - сообщение Джона Ресига здесь .

3
ответ дан Satyajit 25 August 2018 в 09:40
поделиться
Другие вопросы по тегам:

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