假设我宣布

var ad = {}; 

如何检查该对象是否包含用户定义的属性?


当前回答

对象。hasOwn是一个新的静态方法(还不是所有浏览器都完全支持),它检查指定的对象是否有指定的属性作为自己的属性,如果是这样就返回true。如果该属性被继承或在该对象上不存在,则返回false。

您可以遍历对象属性并检查它们是否确实是自己的属性

for (let property in ad) {
   if (Object.hasOwn(ad, property)) {
    // handle your code for object own properties here
  }
}   

更多关于Object的信息。hasOwn - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/

浏览器兼容性在这里- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn#browser_compatibility

其他回答

你可以循环遍历对象的属性,如下所示:

for(var prop in ad) {
    if (ad.hasOwnProperty(prop)) {
        // handle prop as required
    }
}

使用hasOwnProperty()方法来确定对象是否将指定的属性作为直接属性,而不是从对象的原型链继承,这很重要。

Edit

来自注释:您可以将该代码放入函数中,并使其在到达有注释的部分时立即返回false

这个怎么样?

var obj = {},
var isEmpty = !obj;
var hasContent = !!obj

你可以使用内置的Object。方法获取对象上的键列表并测试其长度。

var x = {};
// some code where value of x changes and than you want to check whether it is null or some object with values

if(Object.keys(x).length){
 // Your code here if x has some properties  
}
for (var hasProperties in ad) break;
if (hasProperties)
    ... // ad has properties

如果你必须确保安全并检查对象原型(这些是由某些库添加的,默认情况下没有):

var hasProperties = false;
for (var x in ad) {
    if (ad.hasOwnProperty(x)) {
        hasProperties = true;
        break;
    }
}
if (hasProperties)
    ... // ad has properties

使用jQuery,你可以使用:

$.isEmptyObject(obj); // Returns: Boolean

从jQuery 1.4开始,这个方法既检查对象本身的属性,也检查从原型继承的属性(因为它不使用hasOwnProperty)。

随着ECMAScript第五版在现代浏览器(IE9+, FF4+, Chrome5+, Opera12+, Safari5+),你可以使用内置的对象。键的方法:

var obj = { blah: 1 };
var isEmpty = !Object.keys(obj).length;

或者简单的JavaScript:

var isEmpty = function(obj) {
               for(var p in obj){
                  return false;
               }
               return true;
            };