如何测试对象"isEmpty()"如果对象.原型被修改

How to test whether object "isEmpty()" if Object.prototype was modified?

本文关键字:对象 quot 原型 修改 如果 何测试 测试 isEmpty      更新时间:2023-09-26

我想测试一个对象是否为空:{}。下面是典型的用法:

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?!**

我试图破坏对象的原型,改变它的构造函数,以及所有类似的hack。没有效果,但也许我做错了(可能)。

删除obj.hasOwnProperty过滤器:

function isEmpty(obj) {
  for (var prop in obj) {
    return false;
  }
  return true;
}
<标题> 演示

这样,它还会告诉你是否包含任何属性,或者是否有东西在原型链中,如果这是你想要的。

或者您可以更改

if (obj.hasOwnProperty(prop))

if (!obj.hasOwnProperty(prop))

如果你只是想知道是否有东西扰乱了它的原型