for in语句的问题?

var person={wbg:18};
console.log(person.wbg);
//此处显示18
for(var p in person){
console.log(this.p);
//为什么此处会显示wbg,而不是它的值18呢?又如何能让它显示18?
}

请各位指点一下,说明其中的原理,谢谢!

阅读 3.6k
3 个回答

全局环境下,
this===window
因而
this.p===window.p===p
而在for p in person语法中
被枚举赋值给p的是person的键
因此你可能需要的是console.log(person[p])

var person={wbg:18};
console.log(person.wbg);
//此处显示18
for(var p in person){
    console.log(this.p);
    //为什么此处会显示wbg,而不是它的值18呢?又如何能让它显示18?
}

for...in 语句是一个对对象属性的枚举操作

for(var p in person){
首先会在全局作用域下或某个函数作用域下声明一个变量p,同时将person的某个可遍历属性名赋值给p
所以执行 console.log(this.p);时,如在全局环境而非函数内执行,其值wig
如果函数体内执行,其值为undefined,如下

(function(){
    for(var prop in person){
        console.log(prop);
        console.log('>>'+this. prop);//undefined
    }
}());

如要18,那就执行persion[p]

总觉得这里的标题应该是this指向问题

var person={
    wbg:18,
    show:function(){
        console.log(this.wbg)
    }
}
person.show()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题