如何判断一个对象是{}
const a = {}
Object.keys(a).length === 0
or
JSON.stringify(a) === '{}'
@mosaic101 let b=Object.create({a:1}) 结果就不对
来自酷炫的 CNodeMD
基于楼上的方法稍作兼容处理:
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); //[ ]
const isEmpty = val => val == null || !(Object.keys(val) || val).length;
你的空是哪种意义的?{}和Object.create(null)不一样。虽然看上去一样,都是空对象
_.isEmpty()
function isEmptyObj (obj) {
for (var key in obj) {
return false; // 非空对象
}
return true; // 对象为空
}
@mosaic101 第一中方法我也想过。
@ilovedesert001 这个可能还需要先判断变量是否为object类型,且不为null。
@fruit-memory 标题写的就是{}。
function isEmpty (obj) {
let keys=Object.keys(obj)
return !keys.length||!(keys.some((key)=>{ return obj.hasOwnProperty(key) }))
}
我觉得应该这么写
@fruit-memory 不同在哪儿?请不吝赐教,貌似Object.create(null)的结果也是{}
创建空对象的方法:{}, new Obejct(), Object.create()
都可以创建一个空对象,但是Object.create()
接收到的第一个参数为null时,不继承Object
的所有方法和属性,vue源码中初始化空对象很多也用的Object.create(null)
$.isPlainObject
function isEmptyObject(obj) {
for(var key in obj) {
if(obj.hasOwnProperty(key))
return false;
}
return true;
}
isEmptyObject({})