当前位置:  开发笔记 > 编程语言 > 正文

如何检查对象在JavaScript中是否有任何属性?

如何解决《如何检查对象在JavaScript中是否有任何属性?》经验,为你挑选了7个好方法。

假设我宣布

var ad = {}; 

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



1> Dhaval Chaud..:

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

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 > 0){
 // Your code here if x has some properties  
}


_这就在这里_是正确的答案.上面接受的答案是解决方法,并且比检查按键数量更昂贵; 这使得_way更有意义_.
Object.keys( "MyString的"); 产生密钥也是我认为不可取的.在我看来,这个答案是不完整的.
@DhavalChaudhary感谢您对我的评论的回复。当我尝试这段代码时,`var str =“ MyString”; Object.keys(str);`,控制台为每个字符输出0到7之间的8个键。还是我还是不明白答案。
@MikedeKlerk,但这仅是对象的解决方案,而不是字符串,请参考问题。
@MikedeKlerk请仔细阅读,它不是Object.keys(“ mystring”); 它是Object.keys(objectVariableName),它将返回object中所有键的数组。例如:{'x':'abc','y':'def'}它将是['x','y']

2> CMS..:

怎么做一个简单的功能?

function isEmptyObject(obj) {
  for(var prop in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, prop)) {
      return false;
    }
  }
  return true;
}

isEmptyObject({}); // true
isEmptyObject({foo:'bar'});  // false

hasOwnProperty方法调用直接上Object.prototype只加一点更安全,试想使用正常以下obj.hasOwnProperty(...)电话:

isEmptyObject({hasOwnProperty:'boom'});  // false

注意:( 以后) 上面的方法依赖于for...in语句,并且此语句仅针对可枚举属性进行迭代,在当前最广泛实现的ECMAScript标准(第3版)中,程序员无法创建不可枚举的属性. .

但是现在ECMAScript第5版已经改变了,我们可以创建不可枚举,不可写或不可删除的属性,因此上述方法可能会失败,例如:

var obj = {};
Object.defineProperty(obj, 'test', { value: 'testVal', 
  enumerable: false,
  writable: true,
  configurable: true
});
isEmptyObject(obj); // true, wrong!!
obj.hasOwnProperty('test'); // true, the property exist!!

ECMAScript 5解决这个问题的方法是:

function isEmptyObject(obj) {
  return Object.getOwnPropertyNames(obj).length === 0;
}

Object.getOwnPropertyNames方法返回一个Array包含的名字自己的属性的对象,而枚举与否,是由浏览器厂商现在实现了这个方法,它已经在Chrome 5 Beta版和最新的WebKit的每晚构建.

Object.defineProperty 也适用于那些浏览器和最新的Firefox 3.7 Alpha版本.


@Casey,编辑,如果一个对象覆盖`hasOwnProperty`属性,该函数可能会崩溃...我知道我有点偏执...但有时你不知道你的代码将在哪种环境中使用,但你知道你想用什么方法......
回答这个问题的+1 ......以及未来的其他问题!:)

3> Daniel Vassa..:

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

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

使用该hasOwnProperty()方法很重要,以确定对象是否具有指定属性作为直接属性,而不是从对象的原型链继承.

编辑

从评论: 您可以将该代码放在一个函数中,并在它到达有注释的部分时返回false

性能测试

测试Object.Keys vs For..In测试任何属性时


我认为现在使用`Object.keys`将是最简单的:`var a = [1,2,3]; a.something = 4; console.log(Object.keys(a))`因为它已经是ECMA 5你可以安全地填充它:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys#Compatibility
@Ricky:您可以将该代码放在一个函数中,并在它到达有注释的部分时返回false.
嗨丹尼尔,实际上我正在寻找一种设备来检查对象是否包含用户定义的属性.不检查是否存在特定属性.
请注意,"当今"使用ES5,本机对象可以具有不可枚举的自有属性,例如`Object.defineProperty(obj,'foo',{enumerable:false,value:'foo'})`.
这个解决方案是一种_check现有密钥的方法,但真正的,有效的,最正确的答案是使用Object.keys(x).length.你不需要自己创造一个功能,一个已经存在!

4> kayz1..:

使用jQuery,您可以使用:

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

从jQuery 1.4开始,此方法检查对象本身的属性和从原型继承的属性(因为它不使用hasOwnProperty).

随着ECMAScript的第5版的现代浏览器(IE9 +,FF4 +,Chrome5 +,Opera12 +,Safari5 +),你可以使用内置的Object.keys方法:

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

或普通的旧JavaScript:

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



5> Zaptree..:

最新的浏览器(和node.js)支持Object.keys(),它返回一个包含对象文字中所有键的数组,因此您可以执行以下操作:

var ad = {}; 
Object.keys(ad).length;//this will be 0 in this case

浏览器支持:Firefox 4,Chrome 5,Internet Explorer 9,Opera 12,Safari 5

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys



6> Gruff Bunny..:

如果您正在使用underscore.js,那么您可以使用_.isEmpty函数:

var obj = {};
var emptyObject = _.isEmpty(obj);



7> sfs..:

如果您愿意使用lodash,则可以使用该some方法.

_.some(obj) // returns true or false

看到这个小jsbin的例子

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有