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
而obj.'name'的点语法是不会自动转换成obj.name的,即:
obj.'name'==obj.name报错
不知道我理解的对不对...
肯定会报错的,运算符优先级啊
嵌套的由内而外
链式由左往右
这句说的对!