一、in 是用来干嘛的?
in操作符用来判断某个索引是否属于某个对象,可以是对象的直接属性,也可以是对象原型上的属性
二、判断索引是否属于数组
1、判断索引值是否属于数组
const arr = ['a', 'b', 'c']
arr.length = 4
console.log(0 in arr) // true
console.log(1 in arr) // true
console.log(2 in arr) // true
console.log(3 in arr) // true
console.log(4 in arr) // false
2、删除索引值后再使用in查找为false
const arr = ['a', 'b', 'c']
delete arr[2] // 或使用arr.splice(2, 1)删除该索引对应的值
console.log(2 in arr) // false
3、in会查找到原型上的属性
const arr = ['a', 'b', 'c']
Array.prototype.aa = 'aa'
Object.prototype.bb = 'bb'
console.log('aa' in arr) // true
console.log('bb' in arr) // true
三、判断索引值是否属于对象
1、判断对象的直接属性是否属于对象
function Obj() {
this.name = 'xx'
this.age = 10
}
const obj = new Obj()
console.log('name' in obj) // true
2、删除索引值后再使用in查找为false
delete obj.name // 或Reflect.deleteProperty(obj, 'name')
console.log('name' in obj) // false
如果设置属性值为undefined,还是可以通过in查找到
obj.name = undefined
console.log('name' in obj) // true
3、in会查找到原型上的属性
Obj.prototype.aa = 'aa'
Object.prototype.bb = 'bb'
console.log('aa' in obj) // true
console.log('bb' in obj) // true
console.log('toString' in obj) // true
四、in的右边必须是一个对象
console.log(1 in new String('abc')) // true
console.log(1 in 'abc') // 使用字面量时会报错 Uncaught TypeError: Cannot use 'in' operator to search for '1' in abc