2011-11-20 16 views
20

¿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?

+0

Puede encontrar esto interesante: http://stackoverflow.com/questions/383402/is-javascript-s-new-keyword-considered-harmful – nickd

Respuesta

29

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ón Array(…) es equivalente a la expresión de creación de objeto new Array(…) con los mismos argumentos.

5

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().

+0

Correcto, hay exactamente lo mismo. – Raynos

+0

Probablemente deberías usar 'x = []' en JavaScript y CoffeeScript a menos que necesites pre-dimensionar la matriz por algún motivo. –

+0

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). –

9

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.