Appearance
运算符 in
对于 in 运算符我们常见的情况都是在for ... in
中使用,但是其也可以单独使用,如 "length" in [1,2] === true
参数
prop 一个字符串类型或者 symbol 类型的属性名或者数组索引(非 symbol 类型将会强制转为字符串)。
objectName 检查它(或其原型链)是否包含具有指定名称的属性的对象。
下面我们用一个例子来进入 in
例子
js
/**
* 判断对象上是否存在指定的属性(包含原型链上)
*/
function hasProp(obj, key) {
return key in obj
}
其主要特殊的是判断是否存在且可以在原型链上,如果只是对象本身的属性,那么我们可以使用 Object.hasOwnProperty(obj , key)
,但是这个只能是本身的属性,那么想length
或者自定义在原型链上的属性就找不到
js
const hasOwnProp = (obj, key) => {
return Object.hasOwnProperty(obj, key)
}
const obj1 = Object.create({ a: 1 })
// 结果
console.log(hasProp(obj1, "a")) // 结果为 true
console.log(hasOwnProp(obj1, "a")) // 结果为 false
同理,我们也可以通过Object.keys(obj).includes(key)
去判断属性是否是本身的属性
拓展
js
console.log(hasProp(obj1, "length")) // 结果为 true
console.log(hasProp([1, 2, 3], "length")) // 结果为 true
console.log(hasProp(new String("123"), "length")) // 结果为 true
Object.defineProperty(obj1, {
b: {
enumerable: false,
value: 2,
},
})
console.log(hasProp(obj1, "b")) // 结果为 true