如何判断一个对象是{}
发布于 6 年前 作者 gyj1278 4360 次浏览 来自 问答

如何判断一个对象是{}

17 回复
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); // [ ]

  1. Symbol键值 const age = Symbol(‘age’); person[age] = 10; Object.keys(person); // [ ]

  2. Object.create const Rose = Object.create(person); Object.keys(Rose.proto); //[ ]

const isEmpty = val => val == null || !(Object.keys(val) || val).length;

你的空是哪种意义的?{}和Object.create(null)不一样。虽然看上去一样,都是空对象

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)

function isEmptyObject(obj) {
    for(var key in obj) {
      if(obj.hasOwnProperty(key))
         return false;
      }
    return true;
}
isEmptyObject({})
回到顶部