Ответ 1
spec говорит:
Когда
Array
вызывается как функция, а не как конструктор, он создает и инициализирует новый объект Array. Таким образом, вызов функцииArray(…)
эквивалентен выражению создания объектаnew Array(…)
с теми же аргументами.
В чем разница (если есть) между
x = Array()
а также
x = new Array()
Какой я должен использовать?
spec говорит:
Когда
Array
вызывается как функция, а не как конструктор, он создает и инициализирует новый объект Array. Таким образом, вызов функцииArray(…)
эквивалентен выражению создания объектаnew Array(…)
с теми же аргументами.
Вы должны использовать литерал []
. Причины описаны здесь. Использование конструктора Array()
может быть неоднозначным, поскольку оно принимает либо length
, либо список элементов:
new Array(5) // []
new Array('5') // ['5']
[5] // [5]
['5'] // ['5']
Причина, по которой вы можете использовать Array
без оператора new
, заключается в том, что внутри он обычно использует трюк с конструкторами:
function Thing(){
if (!(this instanceof Thing)){
return new Thing()
}
// ... define object
}
То есть, если вы вызываете Thing()
, он вызовет new Thing()
для вас.
Я считаю, что оба они эквивалентны. Однако, по крайней мере, в JavaScript вы всегда должны использовать буквенный синтаксис:
x = []
Но на основании некоторых тестов в браузерах, которые у меня есть, Array(1, 2, 3)
дает тот же результат, что и new Array(1, 2, 3)
, и тот же с Array(15)
и new Array(15)
. Или просто new Array()
.
var arr = new F ([2,17,8, -5]);
как мне сделать устройство, которое влияет на arr на нем arr.metod();