¿cuál es la diferencia (si hay alguna) entreCoffeeScript “Array()” vs “new Array()”
x = Array()
y
x = new Array()
en CoffeeScript (o JavaScript para tal fin)? ¿Cuál debería usar?
¿cuál es la diferencia (si hay alguna) entreCoffeeScript “Array()” vs “new Array()”
x = Array()
y
x = new Array()
en CoffeeScript (o JavaScript para tal fin)? ¿Cuál debería usar?
El spec dice:
Cuando
Array
se llama como una función más que como un constructor, que crea y inicializa un nuevo objeto Array. Por lo tanto, la llamada de funciónArray(…)
es equivalente a la expresión de creación de objetonew Array(…)
con los mismos argumentos.
Creo que ambos son equivalentes. Sin embargo, en JavaScript, al menos, siempre se debe utilizar la sintaxis literal:
x = []
Pero en base a unas pruebas en los navegadores que tengo, Array(1, 2, 3)
da el mismo resultado que new Array(1, 2, 3)
, y lo mismo con Array(15)
y new Array(15)
. O simplemente llana new Array()
.
Correcto, hay exactamente lo mismo. – Raynos
Probablemente deberías usar 'x = []' en JavaScript y CoffeeScript a menos que necesites pre-dimensionar la matriz por algún motivo. –
mu es exactamente correcto: utilice 'arr = new Array (n)' (donde 'n' es un número) si y solo si está haciendo algo de alto rendimiento donde sabe qué tan grande será la matriz de antemano, por lo la memoria requerida se asigna de una vez (en principio). –
Debe usar el literal []
. Las razones se describen here. Utilizando el constructor Array()
puede ser ambigua, ya que acepta ya sea un length
o una lista de elementos:
new Array(5) // []
new Array('5') // ['5']
[5] // [5]
['5'] // ['5']
La razón puede utilizar Array
sin que el operador new
es que internamente se hace un truco común con constructores:
function Thing(){
if (!(this instanceof Thing)){
return new Thing()
}
// ... define object
}
Es decir, si llama al Thing()
llamará al new Thing()
para usted.
Puede encontrar esto interesante: http://stackoverflow.com/questions/383402/is-javascript-s-new-keyword-considered-harmful – nickd