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?
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[]:
obj.arr.[i] ialah mendapatkan obj.arr dahulu, dan kemudian dapatkan [i] melalui obj.arr:
Pengendali kurungan segi empat sama boleh menggunakan kandungan pembolehubah rentetan sebagai nama atribut. Operator titik tidak boleh.
Satu ialah objek dan satu lagi ialah tatasusunan, iaitu dua struktur data yang sama sekali berbeza
Anda boleh menggunakannya untuk melintasi objek
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
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.. .
Ia pasti akan melaporkan ralat, keutamaan pengendali
Bersarang dari dalam ke luar
Rantai dari kiri ke kanan
Ayat ni betul!