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