/ *枚举
for in语句可以遍历对象中的所有属性名称。枚举将包括函数和原型属性。 * /
//我写的第一个代码
var fruit = {
apple: 2,
orange: 5,
pear:1
},
sentence = 'I have',
quantity;
for (kind in fruit) {
quantity = fruit[kind];
sentence += quantity + '' + kind +
(quantity === 1?'': 's') +
', ';
}
sentence = sentence.substr(0,sentence.length-2) + '.';
alert(sentence);
//我写的第二个代码
var fruit = {
apple: 2,
orange: 5,
pear:1
},
sentence = 'I have',
quantity;//
for (kind in fruit) {
quantity = fruit.kind;
sentence += quantity + '' + kind +
(quantity === 1?'': 's') +
', ';
}
sentence = sentence.substr(0,sentence.length-2) + '.';
alert(sentence);
答案 0 :(得分:1)
此问题的根源是以点( obj.prop )与数组表示法( obj [prop] )访问属性之间的区别。
在第一种情况下:
for (kind in fruit) {
quantity = fruit[kind];
}
在for循环执行期间, kind 变量被赋予字符串“apple”,“orange”,“pear”。所以你有效地进行访问,比如这个水果[“apple”](相当于fruit.apple),水果[“orange”](或fruit.orange),水果[“梨”]或(fruit.pear) )。
在第二种情况下:
for (kind in fruit) {
quantity = fruit.kind;
...
}
您始终可以访问水果对象的种类属性。由于 fruit 对象没有种类属性,因此您将始终获得未定义。
如果您想详细了解如何在JavaScript中解析属性访问权限,可以查看Secrets of the JavaScript Ninja本书 - 它帮助了我。
答案 1 :(得分:0)
这是因为您的kind
是变量。
当您编写fruit.kind
时,JS引擎实际将其解释为fruit['kind']