判断空对象的N种方法
有的时候,我们会在页面初始化时,定义一个空对象。当用户进行了某项操作,就给该对象添加对应的属性。最后,当用户完成一系列操作后,将该对象的数据提交给后台,然后作相应反馈。
但是,可能在提交时,用户可能并未作任何操作。为防止这种情况,我们得先判断该对象是否为空,再给出相应的逻辑处理。
那么问题来了,如何判断一个空对象呢?据统计,有这么几种方法:
循环对象自身属性
function isEmptyObj(obj) { |
这里通过遍历一个对象的属性,若存在某个属性,则为非空对象。
但是要知道,for in
只遍历可枚举属性(包括原型链上的),所以如果对象的属性是通过 Object.defineProperty
方法来添加的,可能会不准确,因为该方法添加的属性,默认是不可枚举的。
但本文所讲的给对象添加的属性,都是通过 obj.attr = value
这种形式。
Object.getOwnPropertyNames
Object.getOwnPropertyNames()
方法返回一个由指定对象的所有自身属性的属性名组成的数组。
这些属性包含不可枚举属性,但是不包含原型链的属性。
进而,我们可以用它来判断其对应的数组长度:
function isEmptyObj(obj) { |
Object.keys
Object.keys()
方法会返回一个指定对象的自身可枚举属性组成的数组。
这些属性包含自身属性,但不包含原型链的属性。
因此,我们也可以用它生成数组的长度来判断:
function isEmptyObj(obj) { |
JSON.stringify
由于一开始我们给定的是空对象 {}
,倘若未在该对象上添加任何属性,那么以下方法也可用于判断:
function isEmptyObj(obj) { |
$.isEmptyObject
如果你的项目引入了 jQuery,那么你可以使用它现成的方法,$.isEmptyObject
:
$.isEmptyObject({}) // true |
_.isEmpty
如果你的项目引入了 Underscore,那么你也可以使用它现成的方法,_.isEmpty
:
_.isEmpty({}) // true |