Maison > Questions et réponses > le corps du texte
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 ?
黄舟2017-05-19 10:35:49
Ê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[]:
arr[i]==> 'name' ==> obj['name'] ==> 取值成功
obj.arr.[i] consiste à obtenir obj.arr en premier, puis à obtenir [i] via obj.arr :
obj.arr==> undefined ==> undefined[i] ==> 报错
嵌套的由内而外
链式由左往右
淡淡烟草味2017-05-19 10:35:49
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.
var a={
name:1
}
var str="name";
console.log(a[str])//1
console.log(a.str)//undefined
巴扎黑2017-05-19 10:35:49
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 objetsfor (var i in obj) {
console.log(obj[i])
}
Quant à 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
.阿神2017-05-19 10:35:49
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.. .
为情所困2017-05-19 10:35:49
Imbriqué de l'intérieur vers l'extérieur
Enchaîné de gauche à droite
C'est vrai !