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]);
};//没值,不报错
這兩種有什麼不同,出現上面的情況的原因是什麼,請大神幫我解惑
你確定不報錯? 看看控制台資訊
obj.arr[i] 這個呼叫是錯的
obj.arr 不存在, 等於 undefined
undefined[i] 肯定會出錯
首先 obj 和 arr 都可以用 [] 的方式來取值:
這個例子的兩種做法不同點在於:
obj[arr[i]] 是先取 arr[i] 再賦值給 obj[]:
obj.arr.[i] 是先取 obj.arr, 再透過obj.arr取[i]:
中括號運算子可以用字串變數的內容作為屬性名稱。點運算子不能的。
一個是物件,一個是陣列,是兩種完全不同的資料結構
遍歷物件可以用
至於後面你說不報錯的原因,是因為for循環的3個表達式(通過分號分割的那3個),obj.length是undefined假值,所以循環不會開始,另外你還可以給obj物件增加一個length試試,這個循環就會啟動了
盆友,報錯了...
不知道我理解的對不對...🎜原因是:
使用obj[]可以傳入字串轉換為屬性名,即:
obj['name']==obj.name返回true
而返回true
而obj.'name'的點語法是不會自動轉換成obj.name的,即:
obj.'name'==obj.name報錯
一定會報錯的,運算符優先級啊
嵌套的由內而外
鍊式由左往右
這句說的對!