Pregunta

Los siguientes dos diferentes fragmentos de código parecen equivalentes a mí:

var myArray = Array();
myArray['A'] = "Athens";
myArray['B'] = "Berlin";

y

var myObject = {'A': 'Athens', 'B':'Berlin'};

dado que ambos se comportan de la misma, y también typeof(myArray) == typeof(myObjects) (tanto el rendimiento 'object').

Hay alguna diferencia entre estas variantes?

Otros consejos

En arrays JS son objetos, ligeramente modificado (con unas cuantas más funciones).

Funciones como:

concat
every   
filer
forEach
join
indexOf
lastIndexOf
map
pop
push
reverse
shift
slice
some
sort
splice
toSource
toString
unshift
valueOf 

Me piensa, yo también metafórica y críptica con la respuesta anterior. Aclaración sigue.

Una instancia de Array, Boolean, Date, Función, Número, RegExp, cuerdas es un objeto, sino mejorado con métodos y propiedades específicas para cada tipo. Por ejemplo, una matriz tiene una propiedad length predefinido mientras que los objetos genéricos no lo hacen.

javascript:alert([].length+'\n'+{}.length)

pantallas

0
undefined

Intrínsecamente, el intérprete FF Gecko también distingue entre matrices y genéricos Los objetos con distintas diferencias que evalúan las construcciones del lenguaje.

javascript:
  ra=[  "one",   "two",   "three"]; ra.a=4;
  ob={0:"one", 1:"two", 2:"three"}; ob.a=4;
  alert(
    ra            +"\n\n"+
    ob            +"\n\n"+
    ra.toSource() +"\n\n"+
    ra.a          +"\t .toSource() forgot me! \n\n"+
    ra.length     +"\t and my length! \n\n"+
    ob.toSource());
  ps=""; for(i in ra)ps+=i+" "; alert(ps);  /* NB .length is missing! */
  ps=""; for(i in ob)ps+=i+" "; alert(ps);

mostrar

one,two,three

[object Object]

["one", "two", "three"]

4    .toSource() forgot me! 

3    and my length! 

({0:"one", 1:"two", 2:"three", a:4})

y 0 1 2 a y 0 1 2 a.

En cuanto a la afirmación de que todos los objetos son funciones:

No es ni sintácticamente ni semánticamente correcta de utilizar una instancia de objeto arbitrario como una función como 123() o "abc"() o []() o {}() o obj() donde obj es cualquier tipo distinto de Function, por lo que una instancia de objeto arbitrario no es un Function. Sin embargo, dada una obj objeto y su tipo como Array, Boolean, Date, ..., ¿cómo obj llegado a ser como una Array, Boolean, Date, ...? ¿Qué es un Array, Boolean, Date, ...?

javascript:
    alert([Array, Boolean, Date, Function, 
              Number, Object, RegExp, String] . join('\n\n') );

pantallas

function Array() {
    [native code]
}

function Boolean() {
    [native code]
}

function Date() {
    [native code]
}

function Function() {
    [native code]
}

function Number() {
    [native code]
}

function Object() {
    [native code]
}

function RegExp() {
    [native code]
}

function String() {
    [native code]
}

En todos los casos, sin equívocos, el tipo de objeto se manifiesta como una definición function, por lo tanto, la afirmación de que todos los objetos son funciones! (La lengua en la mejilla es que intencionalmente oscurecido y difuminado la distinción de una instancia de objeto con la de su tipo! Sin embargo, esto demuestra "no se puede tener uno sin el otro", el objeto y la función! Capitalización hace hincapié en el tipo A en oposición a la instancia.)

Tanto el paradigma de objetos funcionales y parece ser fundamental para la programación y ejecución del intérprete bajo nivel JS primitivas incorporadas, tales como Math y JSON y true.

 javascript:alert([Math, JSON, true.toSource()].join("\n\n"));

pantallas

[object Math]

[object JSON]

(new Boolean(true))

En el momento de la elaboración de Javascript, un estilo de programación centrada en el objeto (de la POO - Orientado a Objetos estilo de programación - el "'s" es mi propio juego de palabras) se puso de moda y el intérprete fue bautizado de manera similar con Java para dar mayor credibilidad. técnicas de programación funcionales fueron relegados a exámenes más abstractas y esotéricos que estudian las teorías de los autómatas, las funciones recursivas, lenguajes formales, etc., y como tal no es tan agradable al paladar. Sin embargo, las fuerzas de estas consideraciones formales son claramente de manifiesto en Javascript particularmente tal como se aplica en el motor Gecko de FF (es decir. .toSource()).


La definición de objeto de Función es particularmente satisfactorio para ello se define como una relación de recurrencia! definieron a partir de su propia definición!

function Function() { [native code] }
y puesto que una función es un objeto del mismo sentimiento se mantiene para
function Object() { [native code] }.

La mayoría de las otras definiciones de inmovilización a un valor terminal estática. Sin embargo, eval() es una particularmente poderosa funcionalidad arbitraria primitiva y así una cadena también puede incrustar.

Nota de nuevo, la lengua vernácula utilizada anteriormente oscurece tipo de objeto y distinción ejemplo.

Todo en JavaScript es un objeto además de los tipos primitivos.

El código

var myArray = Array();

crea una instancia del objeto de matriz mientras

var myObject = {'A': 'Athens', 'B':'Berlin'};

Crea una instancia de objeto del objeto.

Trate el siguiente código

alert(myArray.constructor)
alert(myObject.constructor)

Así se verá la diferencia está en el tipo de constructor de objetos.

La instancia del objeto de matriz contendrá todas las propiedades y métodos de la prototipo de Array.

Una diferencia práctica es cuando se usa en una JSON.stringify array todos los no numérico índices son ignorados:

var arr = [];
var obj = {};

arr['name'] = 'John';
obj['name'] = 'John';

console.log(arr);    // will output [name: "John"]
console.log(obj);    // will output {name: "John"}

JSON.stringify(arr); // will return []
JSON.stringify(obj); // will return {"name":"John"}

La diferencia entre las matrices y los otros objetos en JavaScript.Mientras que las matrices tienen un arte de magia la actualización de la longitud de la propiedad, para objetos que no sean las matrices no hay manera de implementar este tipo de propiedad.

var arrName = [];
arrName[5] = "test";
arrName.length; // <- 6

La matriz se utilizan para almacenar las cosas con un índice ordinal - se usa como un tradicional de la matriz, la pila o cola.Un objeto es un hash - se usa para los datos que tiene una clara clave.

El {}-notación es simplemente azúcar sintáctico para hacer el código más agradable; -)

JavaScript tiene muchas construcciones similares como la construcción de funciones, donde la función () es simplemente un sinónimo de

var Func = new Function("<params>", "<code>");
scroll top