JS之for in循环遍历对象(包括输出value值为什么是obj[k]而不是obj.k)

var obj = {
    name: 'chen',
    age: 18,
    professional:'student'
}
 
for (var k in obj) {
    console.log(k);         // k  输出的是属名 :name, age, professional
    console.log(obj[k]);    // obj[k] 输出的是属性值: chen, 18 , student
}
1
2
3
4
5
6
7
8
9
10

k就是key;

for in 循环主要用于遍历对象 (opens new window)(object);

单独输出k,输出的是属性名 :name, age, professional;

单独输出 obj[k],输出的是属性值 : chen, 18 , student;

最后特别要注意的一点是:遍历 (opens new window)属性值和方法值时,只能用obj[k],不能用obj.k。

如今已经开始学v3了,关于只能用obj[k],不能用obj.k的问题我一直都没有搞懂,今天终于搞懂了。

说起来也有点尴尬,原来在for in函数中,得到的k是一个用var重新声明的变量,所以只能用obj[key]。

obj.k方式的话,对象的属性必须是字符串,而这里的k是一个用var重新声明的形参变量名,所以只能用字符串[变量名]的方式来获取

真正的原因是如果用obj.k,js会把k当作是obj对象中的key(当成字符串)执行,而不会当作循环中的变量再解析成对应属性去执行,就像如下所示

// 如果是obj.k, js会这么认为:不会把k当成变量,而是直接当成obj的key执行
var obj = {
    k: 'xxx'
}
1
2
3
4

但是obj中实际并没有k这个key,所以获取不到。

所以用obj[k]的原因是:只有用obj[k],这个k才会被js当作变量去执行,并把k解析成字符串name, age等key值,这样才能得到最终的value值