首先:附上MDN官网IN操作符的介绍(原文链接)
下面是具体翻译:
in:
概括:
判断指定对象是否存在指定属性,如果存在,返回true,否则,false
语法:
prop in objectName
参数说明:
prop:代表对象的属性(字符串类型)或数组的索引(数值类型)
objectName:待检测的对象
描述:
例子帮助说明:
检测数组的键值:
1 var ary=['one','two','three']; 2 3 ary.length=3; 4 5 console.log(1 in ary); //true 6 7 console.log('three' in ary);//false 8 9 console.log(length in ary);//false
这里要特别注意第7行,in 只能判断数组的键!
检测对象的属性(也许有同学会问能不能检测对象的方法呢?至少我写到这里的时候想到了,通过测试,答案是肯定的。你也可以自己试试。):
1 var obj={ 2 name:'bird', 3 sex:'男', 4 age:22 5 }; 6 7 console.log('sex' in obj);//true
这里要特别注意 字符串 类型,我就犯了这种错,没加引号,导致输出false,感谢Franky!
关于in操作符用在对象字面量和由Stirng construtor构造的string对象的不同:
1 var obj =new String('Hello Javascript'); 2 3 console.log('length' in obj);//true 4 5 console.log('toString' in obj);//true 6 7 var str='Hello World'; 8 9 console.log('toString' in str);//typeError 10 11 console.log('length' in str);//typeError
关于这点,更详细的说明可以点击这里!
in操作符在delete运算后的用法:
如果你通过delete删除对象的某一属性,再用in检测该属性,会返回false(延伸阅读:JavaScript中delete的用法(JavaScript秘密花园 - Object, Prototype))
1 //对象 2 var animal ={ 3 name:'bird', 4 love:'sing', 5 speed:'80' 6 }; 7 8 delete animal.love; 9 10 console.log('love' in animal);//false 11 12 //数组 13 14 var sports=['basketball','football','tabletennis','jump']; 15 16 delete sports[2]; 17 18 console.log(2 in sports);//false 19 20 console.log(sports);//['basketball','football',undefinded,'jump'];
继承的属性:
查找从原型链上继承的属性返回true
1 console.log('toString' in {});//true
这里的toString方法,是Object.prototype的一个方法。