我想测试对象是否为空:{}
。通常使用以下内容:
function isEmpty(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop))
return false;
}
return true;
}
但是假设Object
原型被添加到如下:
Object.prototype.Foo = "bar";
试验:
alert(isEmpty({})); // true
Object.prototype.Foo = "bar";
alert({}.Foo); // "bar" oh no...
alert(isEmpty({})); // true ...**huh?!**
我试图核对对象的原型,改变它的构造函数,以及各种类型的黑客攻击。什么都没有用,但也许我做错了(很可能)。
答案 0 :(得分:3)
只需删除obj.hasOwnProperty
过滤器:
function isEmpty(obj) {
for (var prop in obj) {
return false;
}
return true;
}
这样它也会告诉你是否包含任何属性或原型链中是否有任何属性,如果这是你想要的。
或者你可以改变
if (obj.hasOwnProperty(prop))
到
if (!obj.hasOwnProperty(prop))
如果您只是想知道某些东西是否正在弄乱它的原型。