objetos - matriz javascript
¿Crear un objeto vacío en JavaScript con{} o un nuevo objeto()? (9)
Objetos
No hay ningún beneficio al usar new Object();
- Considerando que {};
puede hacer que su código sea más compacto y más legible.
Para definir objetos vacíos son técnicamente iguales. La sintaxis {}
es más corta, más ordenada (menos Java-ish) y le permite rellenar instantáneamente el objeto en línea, como por ejemplo:
var myObject = {
title: ''Frog'',
url: ''/img/picture.jpg'',
width: 300,
height: 200
};
Arrays
Para las matrices, tampoco hay casi ningún beneficio en utilizar una new Array();
sobre [];
- Con una pequeña excepción:
var emptyArray = new Array(100);
crea una matriz de 100 elementos con todas las ranuras que contienen undefined
, lo que puede ser agradable / útil en ciertas situaciones (como (new Array(9)).join(''Na-Na '') + ''Batman!''
).
Mi recomendación
- Nunca use
new Object();
- Es más pesado que ''{}'' y parece tonto. - Siempre use
[];
- excepto cuando necesita crear rápidamente una matriz "vacía" con una longitud predefinida.
Hay dos formas diferentes de crear un objeto vacío en JavaScript:
var objectA = {}
var objectB = new Object()
¿Hay alguna diferencia en cómo los maneja el motor de script? ¿Hay alguna razón para usar uno sobre el otro?
Del mismo modo, también es posible crear una matriz vacía con una sintaxis diferente:
var arrayA = []
var arrayB = new Array()
Rendimiento de instanciación de matriz
Si desea crear una matriz sin longitud:
var arr = [];
es más rápido que var arr = new Array();
Si desea crear una matriz vacía con una cierta longitud:
var arr = new Array(x);
es más rápido que var arr = []; arr[x-1] = undefined
var arr = []; arr[x-1] = undefined
;
Para ver los puntos de referencia, haga clic en lo siguiente: https://jsfiddle.net/basickarl/ktbbry5b/
Sin embargo, no conozco la huella de memoria de ambos, puedo imaginar que el new Array()
ocupa más espacio.
Creo que {}
fue recomendado en uno de los videos de Javascript here como una buena convención de codificación. new
es necesario para la herencia pseudoclásica. la var obj = {};
way te ayuda a recordar que este no es un lenguaje clásico orientado a objetos, sino uno prototípico. Por lo tanto, la única vez que realmente necesitaría algo new
es cuando está usando funciones de constructores. Por ejemplo:
var Mammal = function (name) {
this.name = name;
};
Mammal.prototype.get_name = function () {
return this.name;
}
Mammal.prototype.says = function() {
return this.saying || '''';
}
Entonces se usa como tal:
var aMammal = new Mammal(''Me warm-blooded'');
var name = aMammal.get_name();
Otra ventaja de usar {}
como oposición al new Object
es que puede usarlo para hacer literales de objetos de estilo JSON.
Esto es esencialmente lo mismo. Usa lo que encuentres más conveniente.
Estos tienen el mismo resultado final, pero simplemente agregaría que el uso de la sintaxis literal puede ayudar a que uno se acostumbre a la sintaxis de JSON (un subconjunto de sintaxis de objeto literal de JavaScript), por lo que podría ser una buena práctica. .
Otra cosa: es posible que tenga errores sutiles si olvida utilizar el new
operador. Entonces, usar literales te ayudará a evitar ese problema.
En última instancia, dependerá de la situación, así como de las preferencias.
La sintaxis literal del objeto y la matriz {} / [] se introdujo en JavaScript 1.2, por lo que no está disponible (y producirá un error de sintaxis) en las versiones de Netscape Navigator anteriores a 4.0.
Mis dedos aún están predeterminados para decir nueva matriz (), pero soy un hombre muy viejo. Afortunadamente, Netscape 3 no es un navegador que muchas personas tengan que considerar hoy ...
Sí, hay una diferencia, no son lo mismo. Es cierto que obtendrás los mismos resultados, pero el motor funciona de manera diferente para ambos. Uno de ellos es un objeto literal, y el otro es un constructor, dos formas diferentes de crear un objeto en javascript.
var objectA = {} //This is an object literal
var objectB = new Object() //This is the object constructor
En JS, todo es un objeto, pero debe tener en cuenta lo siguiente con el nuevo Objeto (): puede recibir un parámetro y, dependiendo de ese parámetro, creará una cadena, un número o solo un objeto vacío.
Por ejemplo: new Object(1)
, devolverá un número. new Object("hello")
devolverá una cadena, significa que el constructor de objetos puede delegar, dependiendo del parámetro, la creación del objeto a otros constructores como cadenas, números, etc. Es muy importante tener esto en cuenta cuando Estás administrando datos dinámicos para crear objetos.
Muchos autores recomiendan no usar el constructor de objetos cuando puede usar una cierta notación literal, en donde estará seguro de que lo que está creando es lo que espera tener en su código.
Le sugiero que haga una lectura adicional sobre las diferencias entre la notación literal y los constructores en javascript para encontrar más detalles.
OK , hay solo 2 formas diferentes de hacer lo mismo! ¡Uno llamado object literal
y el otro es un constructor
funciones!
Pero sigue leyendo, hay un par de cosas que me gustaría compartir:
El uso de {}
hace que su código sea más legible, mientras que la creación de instancias de Object
u otras funciones integradas no se recomienda ...
Además, la función Objeto obtiene parámetros como una función, como Object(params)
... pero {}
es una forma pura de iniciar un objeto en JavaScript ...
El uso de literal de objeto hace que su código se vea mucho más limpio y fácil de leer para otros desarrolladores y está en línea con las mejores prácticas en JavaScript ...
Si bien el Objeto en Javascript puede ser casi cualquier cosa, {}
solo apunta a objetos de javascript, para la prueba de cómo funciona, haga lo siguiente en su código de javascript o consola:
var n = new Object(1); //Number {[[PrimitiveValue]]: 1}
¡Sorprendentemente, está creando un número!
var a = new Object([1,2,3]); //[1, 2, 3]
¡Y esto es crear un Array!
var s = new Object(''alireza''); //String {0: "a", 1: "l", 2: "i", 3: "r", 4: "e", 5: "z", 6: "a", length: 7, [[PrimitiveValue]]: "alireza"}
y este extraño resultado para String
!
Entonces, si está creando un objeto, se recomienda usar el literal del objeto, tener un código estándar y evitar cualquier accidente de código como el de arriba, ¡también en cuanto a rendimiento utilizando {}
es mejor en mi experiencia!
var objectA = {}
es mucho más rápido y, en mi experiencia, más comúnmente utilizado, por lo que probablemente es mejor adoptar el ''estándar'' y guardar algo de escritura.