Skip to content

JS 判断属性是否存在

1. 直接判断 obj.a

js
var obj = {
  a: 1
};
if (obj.a) {
  console.log("存在");
}

2. Object.keys

对象自身的可枚举属性, 不包括原型上的属性。

js
var obj = {
  a: 1
};
if (Object.keys(obj).includes("a")) {
  console.log("存在");
}

原型上的属性不存在。

js
function A() {}
A.prototype.a = 1;
const obj = new A();

if (Object.keys(obj).includes("a")) {
  console.log("存在");
} else {
  console.log("不存在"); // true
}

不可枚举的属性

js
const obj = {};
Object.defineProperty(obj, "a", {
  enumerable: false,
  value: 1
});

if (Object.keys(obj).includes("a")) {
  console.log("存在");
} else {
  console.log("不存在"); // true
}

3. hasOwnProperty

自有的就可以, 不要求可枚举, 原型上的不行。

js
const obj = {};
Object.defineProperty(obj, "a", {
  enumerable: false,
  value: 1
});

if (obj.hasOwnProperty("a")) {
  console.log("存在"); // true
} else {
  console.log("不存在");
}

原型上的属性不存在。

js
function A() {}
A.prototype.a = 1;
const obj = new A();

if (obj.hasOwnProperty("a")) {
  console.log("存在");
} else {
  console.log("不存在"); // true
}

4. in

不要求可枚举, 也不要求是自有的, 原型上也可以。

js
const obj = {};
Object.defineProperty(obj, "a", {
  enumerable: false,
  value: 1
});

if ("a" in obj) {
  console.log("存在"); // true
} else {
  console.log("不存在");
}
js
function A() {}
A.prototype.a = 1;
const obj = new A();

if ("a" in obj) {
  console.log("存在"); // true
} else {
  console.log("不存在");
}