2012-07-30 13 views
5

Duplicar posible:
Create an empty object in JavaScript with {} or new Object()?¿Cuál es la mejor práctica a seguir al declarar una matriz en Javascript?

Cuando quiero declarar una nueva matriz que utilizo esta notación

var arr = new Array(); 

Pero cuando se prueba en línea, por ejemplo, en jsbin, una advertencia me señala "Usar la notación literal de matriz []".

No encontré una razón para evitar el uso del constructor. ¿Es de alguna manera menos eficiente que usar []? ¿O es una mala práctica?

¿Hay una buena razón para usar var arr = []; en lugar de var arr = new Array();?

Respuesta

5

Mayormente, la gente usa var a = [] porque Douglas Crockford dice que sí.

Sus razones incluyen el comportamiento no intuitivo e inconsistente de new Array():

var a = new Array(5);  // an array pre-sized to 5 elements long 
var b = new Array(5, 10); // an array with two elements in it 

Tenga en cuenta que no hay manera de new Array() para crear una matriz con un solo elemento número especificado previamente en ella!

Usar [] es en realidad más eficiente y más seguro también. Es posible sobrescribir el constructor Array y hacer que haga cosas extrañas, pero no puede sobreescribir el comportamiento de [].

Personalmente, siempre uso la sintaxis [], y siempre uso {} sintaxis en lugar de nuevo Object().

+0

¿Qué quiere decir con * ninguna [...] manera de crear una matriz con solo un elemento de número especificado previamente en ella *? – KooiInc

+1

Quiere decir que no puedes crear una matriz [123] usando la nueva matriz (123) ya que crea una matriz predefinida del tamaño dado. –

0

La práctica recomendada es utilizar

var arr = []; 

ya ha respondido here

+2

El hombre pidió una explicación de por qué es eso mejor. –

7

[] es:

  • más corto
  • más clara
  • no sujeto a new Array(3) y new Array(3,3) haciendo cosas completamente diferentes
  • no puede ser anulado. código

Ejemplo:

var a = new Array(3); 
var b = new Array(3,3); 
Array = function() { return { length: "!" }; }; 
var c = new Array(); 
var d = []; 
alert(a.length); // 3 
alert(b.length); // 2 
alert(c.length); // ! 
alert(d.length);​ // (still) 0​​​​​​​​ 

Este código live - tratarán de crear 4 alertas!

+0

Buena respuesta. Por cierto, estoy interesado en saber por qué crees que el nuevo Array (3) y el nuevo Array (3,3) son contradictorios. Realizan inicializaciones completamente diferentes. –

+0

'[]' también es [más rápido] (http://jsperf.com/literal-vs-constructor-array/4) en muchos navegadores. –

+0

@AshwinPrabhu - Que hagan inicializaciones completamente diferentes es mi punto. Requiere que los mantenedores sepan que agregar un segundo argumento cambia el significado del primer argumento. – Quentin

0

En javascript, debe usar literal cuando pueda.

var a = []; en lugar de var o = new Array();

var o = {}; en lugar de var o = new Object();

Del mismo modo, no lo haga new String("abc");, new Number(1);, y así sucesivamente.

0

JavaScript es un lenguaje de prototipos y no un lenguaje clásico como C#. Aunque JavaScript tiene un nuevo operador que se parece mucho a C#, no debe usarlo para crear nuevos objetos o matrices.

//Bad way to declare objects and arrays 
var person = new Object(), 
    keys = new Array(); 

La nueva palabra clave se añadió a la lengua en parte para apaciguar las lenguas clásicas, pero en realidad tiende a confundir a los desarrolladores más de los ayude. En su lugar, existen formas nativas en JavaScript para declarar objetos y matrices y, en su lugar, debe usarlas.

En lugar de utilizar la sintaxis anterior, en su lugar debe declarar sus objetos y matrices utilizando su notación literal.

//Preferred way to declare objects and arrays 
var person = {}, 
    keys = []; 

El uso de este patrón que realmente tiene mucha potencia expresiva utilizando literales de objetos y la sintaxis de matrices de inicialización.

//Preferred way to declare complex objects and arrays 
var person = { 
     firstName: "Elijah", 
     lastName: "Manor", 
     sayFullName: function() { 
      console.log(this.firstName + " " + 
       this.lastName); 
     } 
    }, 
    keys = ["123", "676", "242", "4e3"]; 

Mejor Práctica

Usted debe declarar todas las variables mediante su notación literal en lugar de utilizar la nueva operación. De manera similar, no debe usar la palabra clave nueva para Boolean, Number, String o Function. Todo lo que hacen es agregar más hinchazón y ralentizar las cosas.

La única razón real por la que utilizaría la palabra clave nueva es si está creando un objeto nuevo y desea que use un constructor que haya definido. Para obtener más información sobre este tema, puede consultar la publicación de Douglas Crockford titulada JavaScript, We Hardly new Ya.

Cuestiones relacionadas