Skip to content

运算符 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