Les deux extraits de code différents suivants me semblent équivalents:
var myArray = Array();
myArray['A'] = "Athens";
myArray['B'] = "Berlin";
et
var myObject = {'A': 'Athens', 'B':'Berlin'};
parce qu'ils se comportent tous les deux de la même manière, et aussi typeof(myArray) == typeof(myObjects)
(tous deux donnent «objet»).
Y a-t-il une différence entre ces variantes?
la source
title
,description
etitems
propriétés. Tout dépend de votre connaissance de la langue et de la manière dont vous l'utilisez.Dans les tableaux JS se trouvent des objets, juste légèrement modifiés (avec quelques fonctions supplémentaires).
Fonctions comme:
la source
Je pense, moi trop métaphorique et cryptique avec la réponse précédente. Une clarification suit.
Une instance de Array, Boolean, Date, Function, Number, RegExp, String est un objet mais amélioré avec des méthodes et des propriétés spécifiques à chaque type. Par exemple, un tableau a une
length
propriété prédéfinie alors que les objets génériques n'en ont pas.affiche
Intrinsèquement, l'interpréteur FF Gecko fait également la distinction entre les tableaux et les objets génériques avec des différences distinctes évaluant les constructions de langage.
affichage
et
0 1 2 a
et0 1 2 a
.Concernant l'affirmation selon laquelle tous les objets sont des fonctions:
Il n'est ni syntaxiquement ni sémantiquement correct d'utiliser une instance d'objet arbitraire comme une fonction comme
123()
ou"abc"()
ou[]()
ou{}()
ouobj()
oùobj
est un type autre queFunction
, donc un objet arbitraire INSTANCE n'est pas aFunction
. Cependant, étant donné un objetobj
et son type commeArray, Boolean, Date, ...
, comment est-ilobj
arrivé à être en tant queArray, Boolean, Date, ...
? Qu'est-ce qu'unArray, Boolean, Date, ...
?affiche
Dans tous les cas, sans équivoque, le type d'objet se manifeste comme une
function
définition, d'où l'affirmation que tous les objets sont des fonctions! (La ironie est que j'ai intentionnellement obscurci et brouillé la distinction d'une instance d'objet avec celle de son type! Pourtant, cela montre "vous ne pouvez pas avoir l'un sans l'autre", Objet et fonction! La capitalisation met l'accent sur le type comme opposé à l'instance.)Un paradigme fonctionnel et un paradigme d'objet semblent être fondamentaux pour la programmation et la mise en œuvre des primitives intégrées de bas niveau de l'interpréteur JS, telles que
Math
etJSON
ettrue
.affiche
Au moment du développement de Javascript, un style de programmation orienté objet (POO - Object Oriented Programming style - le "s" est mon propre jeu de mots!) Était en vogue et l'interpréteur a été baptisé de la même manière avec Java pour lui donner une plus grande crédibilité . Les techniques de programmation fonctionnelle ont été reléguées à des examens plus abstraits et ésotériques étudiant les théories des automates, des fonctions récursives, des langages formels, etc. et, en tant que telles, ne sont pas acceptables. Cependant, les points forts de ces considérations formelles sont clairement manifestes dans Javascript, en particulier tel qu'implémenté dans le moteur Gecko de FF (ie.
.toSource()
).La définition d'objet pour Function est particulièrement satisfaisante car elle est définie comme une relation de récurrence! défini en utilisant sa propre définition!
function Function() { [native code] }
et comme une fonction est un objet, le même sentiment vaut
function Object() { [native code] }
.La plupart des autres définitions sont suspendues à une valeur terminale statique. Cependant,
eval()
est une primitive particulièrement puissante et donc une chaîne peut également intégrer des fonctionnalités arbitraires.Notez encore une fois, le vernaculaire utilisé ci-dessus obscurcit le type d'objet et la distinction d'instance.
la source
Tout en JavaScript est un objet en plus des types primitifs.
Le code
crée une instance de l'objet Array pendant que
crée une instance de l'objet Object.
Essayez le code suivant
Vous verrez donc que la différence réside dans le type de constructeur d'objet.
L'instance de l'objet Array contiendra toutes les propriétés et méthodes du prototype Array.
la source
la source
Vous pouvez ajouter des propriétés nommées à presque tout en javascript, mais cela ne signifie pas que vous devriez le faire.
Array
en javascript doit être utilisé comme une liste, si vous souhaitez utiliser un tableau associatif à laObject
place.Sachez que si vous voulez vraiment utiliser un
Array
avec des propriétés nommées au lieu deObject
ces propriétés ne sera pas accessible dans unefor...of
boucle et que vous pourriez également obtenir des résultats inattendus lorsque JSON l'encodage pour le transmettre. Voir l'exemple ci-dessous où tous les index non numériques sont ignorés:la source
La
{}
-notation n'est que du sucre syntaxique pour rendre le code plus agréable ;-)JavaScript a de nombreuses constructions similaires comme la construction de fonctions, où function () n'est qu'un synonyme de
la source
{}
est la notation d'objet littérale,[]
est un tableau littéral, je ne sais pas quel est le point de votre réponse.