Rumah > Soal Jawab > teks badan
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]);
};//没值,不报错
Apakah perbezaan antara kedua-dua ini, dan apakah sebab untuk situasi di atas?
黄舟2017-05-19 10:35:49
Adakah anda pasti anda tidak melaporkan ralat? Semak maklumat konsol
obj.arr[i] Panggilan ini salah
obj.arr tidak wujud, ia sama dengan undefined
undefined[i] Ralat pasti akan berlaku
Pertama sekali, kedua-dua obj dan arr boleh menggunakan kaedah [] untuk mendapatkan nilai:
Perbezaan antara dua kaedah dalam contoh ini ialah:
obj[arr[i]] mula-mula mengambil arr[i] dan kemudian menyerahkannya kepada obj[]:
arr[i]==> 'name' ==> obj['name'] ==> 取值成功
obj.arr.[i] ialah mendapatkan obj.arr dahulu, dan kemudian dapatkan [i] melalui obj.arr:
obj.arr==> undefined ==> undefined[i] ==> 报错
嵌套的由内而外
链式由左往右
淡淡烟草味2017-05-19 10:35:49
Pengendali kurungan segi empat sama boleh menggunakan kandungan pembolehubah rentetan sebagai nama atribut. Operator titik tidak boleh.
var a={
name:1
}
var str="name";
console.log(a[str])//1
console.log(a.str)//undefined
巴扎黑2017-05-19 10:35:49
Satu ialah objek dan satu lagi ialah tatasusunan, iaitu dua struktur data yang sama sekali berbeza
Anda boleh menggunakannya untuk melintasi objek
for (var i in obj) {
console.log(obj[i])
}
Mengenai sebab anda mengatakan tiada ralat dilaporkan kemudian, ia adalah kerana tiga ungkapan gelung for (tiga dipisahkan dengan koma bertitik), obj.length tidak ditentukan dan palsu, jadi gelung tidak akan bermula , anda juga boleh memberikan obj Cuba tambah panjang pada objek, dan kitaran akan bermula
阿神2017-05-19 10:35:49
Rakan, ralat telah dilaporkan...
Sebabnya:
Gunakan obj[] untuk menukar rentetan masuk kepada nama atribut, iaitu:
obj['name']==obj.name kembali true
Dan Sintaks titik obj.'name' tidak akan ditukar secara automatik kepada obj.name, iaitu:
obj.'name'==obj.name error
Saya tidak tahu sama ada saya faham dengan betul.. .