关键字 in 常用来判断对象是否有某个属性(也常用for in 来进行循环),那么在面向对象编程中常会用到的还有一个用来判断某个对象是否有某个属性的方法:Object.prototype中的hasOwnProperty( );hasOwnProperty( )与in的区别就是不会通过原形链进行查找。(用汤姆大叔的话讲就是:hasOwnProperty( )是在javascript中处理属性的方法中唯一的一
个不会去查找原形链的方法,在他的这篇文章有一个小标题(hasOwnProperty函数:)中讲了用法和注意点)
本篇主要是基础篇:使用 in 你可能会遇到的问题
Object.prototype.say=function(){return this.name}; var aa={ name:"name", }; //创建一个对象aa // for(key in aa){ //"name" // console.log(key); //"say" // } //console.log(aa.name);//"name" //console.log(aa.say());//"name" console.log(aa.name in aa);//true 操作符in查找的是对象的key(字符串类型),那么这里aa.name的值刚好是"name"这个字符串;所以是true; console.log(aa.say in aa);//false "function(){return this.name}" console.log(aa.bbb in aa);//false 这里没有报错,因为aa.bbb 是 "undefined" console.log('name' in aa)//true console.log('say' in aa);//true 这里是原形链上的say console.log(123 in aa);//false //console.log(bbb in aa);//这句肯定会抱错,很明显bbb未定义 console.log(name in aa);//false 为什么这里没有报错,而是false?
点击下面看答案
因为 name 是 window 的一个属性,默认为空字符串