in操作符

TOC
  1. 1. 数组里的in
  2. 2. 对象里的in
  3. 3. 其他

数组里的in

var a;
a in ['a','b','c']

false, 尽管数组里面有 a 这个属性, 但是检查的确实数组本身的[特性], 比如 ‘length’,’constructor’之类的属性

var arr = ['one','two','three','four'];
arr.five = '5';          //这里是按照 键值 的方式给数组自身添加属性
arr.six = '6';          //这里是按照 键值 的方式给数组自身添加属性
// arr.push('test');     //给数组内部添加元素
4 in arr;   //false 原来的素组不存在第5个元素
0 in arr;   //true 存在第1个元素
'one' in arr;   //false
'five' in arr;  //true, 通过 键值 添加进去的属性
'length' in arr;//true 这个是数组本身的特性

对象里的in

var obj = {"a":1,"b":2,"c":3}
'a' in obj ; //true,键值属性
'constructor' in obj; //true,自身的特性(属性) 其实也是键值属性

其他

(alert(123))in(alert(321));
(alert(123))in""
""in(alert(321))

像这样的语句,都能执行, 是因为浏览器会先执行了in左右两边的语句,再做出对比.

也许在一些XSS漏洞中,这种书写会有帮助.

访客评论