var obj ={
name:'nnn',
age:22,
job:'worker'
};
var arr=[
'name',
'age',
'job'
];
for (var i=0 ;i<arr.length;i++){
document.writeln(arr[i]+':'+obj[arr[i]]);
};//有值
for (var i=0 ;i<arr.length;i++){
document.writeln(arr[i]+':'+obj.arr[i]);
};//没值,不报错
Quelle est la différence entre ces deux-là et quelle est la raison de la situation ci-dessus, aidez-moi à la comprendre ?
Êtes-vous sûr de ne pas signaler une erreur ? Vérifiez les informations de la console
obj.arr[i] Cet appel est erroné
obj.arr n'existe pas, il est égal à undefined
undefined[i] Une erreur se produira certainement
Tout d'abord, obj et arr peuvent utiliser la méthode [] pour obtenir des valeurs :
La différence entre les deux méthodes dans cet exemple est :
obj[arr[i]] prend d'abord arr[i] puis l'assigne à obj[]:
obj.arr.[i] consiste à obtenir obj.arr en premier, puis à obtenir [i] via obj.arr :
L'opérateur crochet peut utiliser le contenu d'une variable chaîne comme nom d'attribut. L'opérateur point ne le peut pas.
L'un est un objet et l'autre est un tableau, qui sont deux structures de données complètement différentes
Vous pouvez utiliser
pour parcourir des objetsQuant à la raison pour laquelle vous avez dit qu'aucune erreur n'est signalée plus tard, c'est à cause des trois expressions de la boucle for (les trois séparées par des points-virgules), obj.length est indéfini et faux, donc la boucle ne démarrera pas . De plus, vous pouvez également essayer d'ajouter une longueur à l'objet obj, et le cycle commencera
.Ami, une erreur a été signalée...
La raison est :
Utilisez obj[] pour convertir la chaîne entrante en nom d'attribut, c'est-à-dire :
obj['name']==obj.name renvoie vrai
Et la syntaxe par points de obj.'name' ne sera pas automatiquement convertie en obj.name, c'est-à-dire :
obj.'name'==obj.name erreur
Je ne sais pas si je comprends bien.. .
Il signalera certainement une erreur, priorité de l'opérateur
Imbriqué de l'intérieur vers l'extérieur
Enchaîné de gauche à droite
C'est vrai !