Cuando necesito declarar una nueva matriz, uso esta notación
var arr = new Array();
Pero cuando realizo pruebas en línea, por ejemplo en jsbin , una advertencia me indica "Usar la notación literal de matriz []".
No encontré una razón para evitar usar el constructor. ¿Es de alguna manera menos eficiente que usar []
? ¿O es una mala práctica?
¿Hay una buena razón para usar en var arr = [];
lugar de var arr = new Array();
?
javascript
Naigel
fuente
fuente
Respuestas:
En su mayoría , la gente usa
var a = []
porque Douglas Crockford lo dice .Sus razones incluyen el comportamiento no intuitivo e inconsistente de
new Array()
:Tenga en cuenta que no hay forma
new Array()
de crear una matriz con solo un elemento de número preespecificado.¡El uso
[]
es en realidad más eficiente y más seguro también ! Es posible sobrescribir elArray
constructor y hacer que haga cosas extrañas, pero no puede sobrescribir el comportamiento de[]
.Personalmente, siempre uso la
[]
sintaxis, y de manera similar siempre uso la{}
sintaxis en lugar denew Object()
.fuente
[]
llama a un constructor interno, no el valorArray.constructor
que tenga en ese momento.Array
constructor: jsperf.com/new-arrayUna diferencia significativa es que siempre
[]
creará una nueva matriz, mientras que podría ser secuestrada para crear un objeto diferente .new Array
En mi código de ejemplo, he mantenido la
Array
función oculta del resto del alcance del documento, sin embargo, es más probable que si alguna vez te encuentras con este tipo de problema, el código no se haya dejado en un buen cierre, y lo hará probablemente sea difícil de localizar.Descargo de responsabilidad : no es una buena idea secuestrar al
Array
constructor.fuente
para mantenimiento, use
[]
El literal de matriz es más predecible, ya que la mayoría de los desarrolladores lo usan. La mayor parte del uso de la matriz usará el literal, y es valioso que su código coincida con lo que usan otros desarrolladores.
para matrices vacías, use
[]
Como se muestra aquí , usar el literal para vacío y un par de elementos conocidos es más gordo que el constructor Array.
para una matriz de tamaño conocido, use
new Array(size)
Si se conoce el tamaño, el uso del constructor Array mejora significativamente el rendimiento. Sin embargo, también significa que tiene que lidiar con una matriz que ya tiene 'indefinido' llenando todos sus valores.
Como se muestra aquí
Esto también funciona para matrices muy pequeñas también .
fuente
No, en realidad no hay ninguna razón para usar una notación sobre la otra para matrices vacías.
Sin embargo, la mayoría de los navegadores muestran un rendimiento ligeramente mejor usando
x = [];
que llamando al Constructor .Si necesita crear una matriz con un tamaño específico, necesita usar,
x = new Array(10);
por ejemplo, lo que crearía una matriz con 10undefined
ranuras.fuente
La forma más rápida de definir una matriz u objeto es literal, porque no es necesario llamar al constructor
fuente
var arr = [];
lógicamente también usa un constructor. Simplemente siempre es el constructor de matriz incorporado, en lugar de cualquier función que actualmente tenga el nombreArray
.Ambos son correctos solamente. Pero la mayoría de la gente usa
var a = []
Tres formas de declarar una matriz en JavaScript.
Método 1 : podemos declarar explícitamente una matriz con la palabra clave "nueva" de JavaScript para crear una instancia de la matriz en la memoria (es decir, crearla y ponerla a disposición).
Método 2 : utilizamos un método alternativo para declarar matrices.
Método 3 : JavaScript también le permite crear matrices indirectamente, llamando a métodos específicos.
fuente
Hay un límite que el constructor puede tomar como argumentos.
En la mayoría de los sistemas, el límite es 2 ^ 16 (2 bytes):
Eso causará un error (demasiados argumentos ...)
Al usar el literal [] no tienes tales problemas.
En caso de que no te interesen esos arreglos tan grandes, creo que puedes usar lo que prefieras.
fuente
es azucar
es sal
fuente
Es porque
new Array()
es ambiguo. Estos son los constructores correctos:fuente