javascript - síntomas - sintomas de cancer de colon y estomago
¿Cuál es la diferencia entre Array(1) y el nuevo Array(1) en JavaScript? (3)
Con Array
, ambos son equivalentes. Lo new
se inyecta cuando se llama como una función:
15.4.1 El
Array
Constructor llamado como una funciónCuando se llama a
Array
como una función en lugar de como un constructor, crea e inicializa un nuevo objeto Array. Por lo tanto, la función llamadaArray(…)
es equivalente a la expresión de creación de objetonew Array(…)
con los mismos argumentos.
De ECMA-262, 3ª Edición (con similar en 5ª Edición ).
Solo comencé a pensar en esto, pero no pude encontrar ninguna diferencia para jsFiddle a jsFiddle mismo mientras jsFiddle en jsFiddle .
var a = new Array(1),
b = Array(1);
console.log(a, b);
La salida es dos matrices con un miembro indefinido.
Hacer un for ( in )
revela que tienen las mismas propiedades.
¿Cuáles son las diferencias entre estos? ¿El primero simplemente crea una instancia del objeto explícitamente?
Por favor, no me hable sobre el uso de la notación literal de matriz, como ya sé sobre eso. Estoy más deseoso de llenar este vacío en mi conocimiento explicado anteriormente.
La diferencia radica en la implementación de la función Array. Si una llamada a Array sin un nuevo operador devolverá una instancia de Array o no dependerá de la implementación. Por ejemplo, el motor SpiderMonkey de Mozilla hace esto:
static JSBool
Array(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
jsuint length;
jsval *vector;
/* If called without new, replace obj with a new Array object. */
Ese es un comentario real de la fuente real. Las siguientes líneas de código no se reproducen aquí. Supongo que otros motores hacen lo mismo. De lo contrario, el comportamiento no está definido. Una buena lectura sobre este tema es la publicación de John Resig here .
Según Javascript: The Definitive Guide (5th Edition), página 602, "Cuando se llama al constructor Array()
como una función, sin el new
operador, se comporta exactamente como lo hace cuando se lo llama con el new
operador".