如何判断一个对象是{}
如何判断一个对象是{}
17 回复
基于楼上的方法稍作兼容处理:
function isEmptyObject(obj) {
obj = obj.__proto__ && Object.keys(obj.__proto__).length ? obj.__proto__ : obj;
return !Object.keys(obj).length;
}
let o1 = {};
let o2 = {a: 1};
let o3 = Object.create({});
let o4 = Object.create({a: 1});
let o5 = Object.create(null);
console.log(isEmptyObject(o1)); // true
console.log(isEmptyObject(o2)); // false
console.log(isEmptyObject(o3)); // true
console.log(isEmptyObject(o4)); // false
console.log(isEmptyObject(o5)); // true
Object.keys:返回对象自身的所有可枚举的属性的键名
const person = {}
1.不可枚举属性 Object.defineProperty(person,‘sex’,{ configurable:false, value:‘boy’ }); Object.keys(person); // [ ]
-
Symbol键值 const age = Symbol(‘age’); person[age] = 10; Object.keys(person); // [ ]
-
Object.create const Rose = Object.create(person); Object.keys(Rose.proto); //[ ]
function isEmptyObj (obj) {
for (var key in obj) {
return false; // 非空对象
}
return true; // 对象为空
}
function isEmpty (obj) {
let keys=Object.keys(obj)
return !keys.length||!(keys.some((key)=>{ return obj.hasOwnProperty(key) }))
}
我觉得应该这么写
创建空对象的方法:{}, new Obejct(), Object.create()都可以创建一个空对象,但是Object.create()接收到的第一个参数为null时,不继承Object的所有方法和属性,vue源码中初始化空对象很多也用的Object.create(null)
function isEmptyObject(obj) {
for(var key in obj) {
if(obj.hasOwnProperty(key))
return false;
}
return true;
}
isEmptyObject({})