我怎么知道一个物体是空白的?
How can I tell if an object is blank?
如果我使用:
var a = {};
或
var a = new Object();
如果我不知道具体要测试什么,如何测试它是否包含任何内容呢?
(类似于a =={},但这不能正确求值)
您可以使用这个简单的函数:
function isEmpty(object) {
for(var property in object) {
if(object.hasOwnProperty(property))
return false;
}
return true;
}
但是如果你使用jQuery: http://api.jquery.com/jQuery.isEmptyObject/
这似乎是一个无辜的问题,@SiteSafeNL提供的一个简单的解决方案似乎可以工作,但是有一个实现错误没有被考虑在内,IE {DontEnum}错误。
如果你的目标是IE8及以下版本,你需要实现这样的东西:
var isEmpty = (function () {
var hasOwn = Object.prototype.hasOwnProperty,
hasDontEnumBug = !{toString:0}.propertyIsEnumerable("toString"),
dontEnums = ['toString', 'toLocaleString',
'valueOf', 'hasOwnProperty',
'isPrototypeOf', 'propertyIsEnumerable',
'constructor'];
return function (o) {
for (var p in o) {
if (hasOwn.call(o, p))
return false
}
if (hasDontEnumBug) { // IE8 and below
var i = dontEnums.length;
while(i--) {
if (hasOwn.call(o, dontEnums[i]))
return false;
}
}
return true;
};
})();
现在在实现ECMAScript 5的现代浏览器中,正如@Alnitak提到的,你可以使用Object.keys
,但在ES5中,现在我们有了定义不可枚举属性的能力,这些属性不会出现在for-in
循环中,如果你需要检测它们,你必须使用替代方法,例如,使用上面的函数,或Object.keys
:
var obj = Object.create(null, { foo: { value: 1, /* enumerable:false... */} });
isEmpty(obj); // true
Object.keys(obj).length; // 0
// But the property exists:
obj.hasOwnProperty('foo'); // true
obj.foo; // 1
如果您想捕获不可枚举的自身属性,我们需要另一种方法,这就是Object.getOwnPropertyNames
方法存在的原因:
function isEmpty(obj) {
return Object.getOwnPropertyNames(obj).length == 0;
}
在ECMAScript 5中可以使用:
if (Object.keys(a).length === 0) {
...
}
注意:这只会找到可枚举的属性。
相关文章:
- Facebook共享显示一个接一个的空白页面
- AngularJS ng选项在选择一个选项后删除了默认的空白值
- php重定向到一个空白页面
- laravel中的ajax会重新加载一个空白页面
- jQuery's$.post只返回一个空白数据
- jstree 是空白的,并且在实例化后有一个空的
- 使用jquery如何自动删除下拉列表中的第一个空白选项(如果它依赖于另一个选项)
- I'当我试图将java脚本加载到web视图中时,我得到了一个空白屏幕
- 我得到了一个“;未能加载资源“;在尝试运行空白离子启动器应用程序时出现Cordova错误
- 为什么我在所有HTML内容下面都有一个很大的空白
- Facebook重定向到一个空白的权限请求页面
- 我正在尝试将 HTML 画布转换为 HTML 图像,但得到一个空白图像
- 基于时间的 javascript,创建一个大约 30 分钟的空白响应
- 打印时总是有一个额外的空白页
- 提交邮件黑猩猩订阅 php 后,我有一个空白页
- 角度:在另一个模态指令中加载的谷歌地图指令保持空白
- 当我打开它时,它会显示一个空白网页
- 提交回复后 Ajax 它显示一个空白的数据空间
- 当我添加javascript时,它会显示一个空白页
- 为什么当我在 Emberjs 中最后用“id”刷新 url 时,我得到一个空白应用程序