Los siguientes dos fragmentos de código diferentes me parecen equivalentes:
var myArray = Array();
myArray['A'] = "Athens";
myArray['B'] = "Berlin";
y
var myObject = {'A': 'Athens', 'B':'Berlin'};
porque ambos se comportan igual, y también typeof(myArray) == typeof(myObjects)
(ambos producen 'objeto').
¿Existe alguna diferencia entre estas variantes?
fuente
title
,description
yitems
propiedades. Todo depende de qué tan bien conozca el idioma y cómo lo use.En JS, las matrices son objetos, ligeramente modificados (con algunas funciones más).
Funciones como:
fuente
Yo pienso, yo demasiado metafórico y críptico con respuesta anterior. Sigue la aclaración.
Una instancia de Array, Boolean, Date, Function, Number, RegExp, String es un objeto pero mejorado con métodos y propiedades específicos de cada tipo. Por ejemplo, una matriz tiene una
length
propiedad predefinida , mientras que los objetos genéricos no.muestra
Intrínsecamente, el intérprete de FF Gecko también distingue entre Arrays y Objetos genéricos con distintas diferencias al evaluar las construcciones del lenguaje.
exhibiendo
y
0 1 2 a
y0 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{}()
oobj()
dondeobj
es cualquier tipo distintoFunction
, por lo que una instancia de objeto arbitrario no es unaFunction
. Sin embargo, dado un objetoobj
y su tipo comoArray, Boolean, Date, ...
, ¿cómoobj
llegó a ser como unArray, Boolean, Date, ...
? ¿Qué es unArray, Boolean, Date, ...
?muestra
En todos los casos, sin equívocos, el tipo de objeto se manifiesta como una
function
definición, de ahí la afirmación de que todos los objetos son funciones. (La ironía es que oscurecí y desdibujé intencionalmente la distinción de una instancia de objeto con la de su tipo. Aún así, esto muestra que "no se puede tener uno sin el otro", ¡Objeto y función! Las mayúsculas enfatizan el tipo como opuesto a la instancia.)Tanto el paradigma funcional como el de objeto parecen ser fundamentales para la programación e implementación de las primitivas incorporadas de bajo nivel del intérprete JS, como
Math
yJSON
ytrue
.muestra
En el momento del desarrollo de Javascript, estaba en boga un estilo de programación centrado en objetos (OOP, estilo de programación orientada a objetos, ¡el "es mi propio juego de palabras!) Y el intérprete fue bautizado de manera similar con Java para darle mayor credibilidad. . Las técnicas de programación funcional fueron relegadas a exámenes más abstractos y esotéricos que estudian las teorías de los Autómatas, Funciones Recursivas, Lenguajes Formales, etc. y como tales no son tan apetecibles. Sin embargo, las fortalezas de estas consideraciones formales se manifiestan claramente en Javascript, particularmente cuando se implementa en el motor Gecko de FF (es decir
.toSource()
).La definición de Objeto para Función es particularmente satisfactoria porque se define como una relación de recurrencia. definido usando su propia definición!
function Function() { [native code] }
y dado que una función es un Objeto, el mismo sentimiento es válido
function Object() { [native code] }
.La mayoría de las otras definiciones se inactivan a un valor terminal estático. Sin embargo,
eval()
es una primitiva particularmente poderosa, por lo que un String también puede incorporar una funcionalidad arbitraria.Tenga en cuenta de nuevo, la lengua vernácula utilizada anteriormente oscurece el tipo de objeto y la distinción de instancia.
fuente
Todo en JavaScript es un objeto además de los tipos primitivos.
El código
crea una instancia del objeto Array mientras
crea una instancia de objeto Object.
Prueba el siguiente código
Entonces verá que la diferencia está en el tipo de constructor de objeto.
La instancia del objeto Array contendrá todas las propiedades y métodos del prototipo Array.
fuente
fuente
Puede agregar propiedades con nombre a casi cualquier cosa en javascript, pero eso no significa que deba hacerlo.
Array
en javascript debe usarse como una lista, si desea usar una matriz asociativa en suObject
lugar.Tenga en cuenta que si realmente desea usar una
Array
propiedad con nombre en lugar deObject
esas propiedades, no será accesible en unfor...of
bucle y también puede obtener resultados inesperados cuando la codifica JSON para pasarla. Vea el ejemplo a continuación donde se ignoran todos los índices no numéricos :fuente
La
{}
-notación es simplemente azúcar sintáctica para hacer que el código sea más agradable ;-)JavaScript tiene muchas construcciones similares como la construcción de funciones, donde function () es solo un sinónimo de
fuente
{}
es una notación de objeto literal,[]
es una matriz literal, no estoy seguro de cuál es el punto de su respuesta.