in运算符基础问题

var data = [7,8,9]
"0" in data  //=>ture:数组包含元素"0"
1 in data //=>true:数组转换为字符串
3 in data //=> false:没有索引为3的元素

不理解为什么下面这两段代码为true
"0" in data //=>ture:数组包含元素"0"
1 in data //=>true:数组转换为字符串

阅读 3.2k
2 个回答

谢邀。
对于 Javascript 中的 in 操作符,根据 MDN 的定义是:

The in operator returns true if the specified property is in the specified object.

即如果属性存在于操作对象上时返回 true,否则为 false

一般的对象

var obj = {name: 'stephenlee', age: 23};
'name' in obj //true
'hobby' in obj //false

属性名需要用字符串来指定:

name in obj //false

数组对象

使用数字索引值来表示数组对象的属性名称,当然数组对象固有的一些属性不包括在内,例如 length
以题主问题中的数组为例:

var data = [7,8,9];

相当于:

data[0] = 7;
data[1] = 8;
data[2] = 9;

所以很自然有如下结果:

0 in data //true
1 in data //true
2 in data //true
3 in data //false

当然数组对象自带的属性也可以返回 true

length in data //true

也可以将数组对象的索引值和固有属性转换为字符串来处理:

'0' in data
'length' in data

in 操作符是区查询对象的property,详见>>

推荐问题
logo
101 新手上路
子站问答
访问
宣传栏