猿问

如何检查对象是否具有JavaScript中的属性?

如何检查对象是否具有JavaScript中的属性?

如何检查对象是否具有JavaScript中的属性?

考虑:

x = {'key': 1};if ( x.hasOwnProperty('key') ) {
    //Do this}

这是最好的方法吗?


撒科打诨
浏览 306回答 3
3回答

慕田峪9158850

我真的对已经给出的答案感到困惑-它们中的大多数都是完全不正确的。当然,您可以拥有具有未定义、空或假值的对象属性。因此,只需将属性检查简化为typeof this[property]或者,更糟的是,x.key会给你带来完全误导的结果。这取决于你在找什么。如果您想知道一个对象在物理上是否包含一个属性(而且它不是从原型链的某个地方来的),那么object.hasOwnProperty是该走的路。所有现代浏览器都支持它。(在Safari的旧版本(2.0.1和更高版本)中缺少了它,但是这些版本的浏览器很少再使用了。如果您要查找的是,如果对象上有一个可迭代的属性(当您遍历对象的属性时,它将出现),那么执行以下操作:prop in object会给你带来你想要的效果。自使用hasOwnProperty可能是您想要的,并且考虑到您可能需要一个回退方法,我向您提供以下解决方案:var obj = {     a: undefined,     b: null,     c: false};// a, b, c all foundfor ( var prop in obj ) {     document.writeln( "Object1: " + prop );}function Class(){     this.a = undefined;     this.b = null;     this.c = false;}Class.prototype = {     a: undefined,     b: true,     c: true,     d: true,     e: true};var obj2 = new Class();// a, b, c, d, e foundfor ( var prop in obj2 ) {     document.writeln( "Object2: " + prop );}function hasOwnProperty(obj, prop) {     var proto = obj.__proto__ || obj.constructor.prototype;     return (prop in obj) &&         (!(prop in proto) || proto[prop] !== obj[prop]);}if ( Object.prototype.hasOwnProperty ) {     var hasOwnProperty = function(obj, prop) {         return obj.hasOwnProperty(prop);     }}// a, b, c found in modern browsers// b, c found in Safari 2.0.1 and olderfor ( var prop in obj2 ) {     if ( hasOwnProperty(obj2, prop) ) {         document.writeln( "Object2 w/ hasOwn: " + prop );     }}以上是一个可行的跨浏览器解决方案。hasOwnProperty请注意:它无法区分原型上有相同属性的情况和实例上相同的属性-它只是假设它来自原型。根据您的情况,您可以将其改为更宽松或更严格,但至少这应该更有帮助。

侃侃尔雅

注*由于严格的模式,以下内容现已基本过时,以及hasOwnProperty..正确的解决方案是使用严格的模式,并使用obj.hasOwnProperty..这个答案前这两件事,至少也得到了广泛的实施(是的,就是这么古老)。以下是历史记录。记住undefined是(不幸)不如果不使用严格模式,则使用JavaScript中的保留字。因此,某个人(显然是其他人)可能有重新定义它的宏伟想法,破坏了您的代码。因此,一种更可靠的方法是:if (typeof(x.attribute) !== 'undefined')另一方面,这种方法更冗长,也更慢。*-/一个共同的选择是确保undefined是其实未定义的,例如将代码放入接受附加参数的函数,称为undefined,而不是传递一个值。为了确保它没有传递一个值,您可以立即自己调用它,例如:(function (undefined) {     … your code …     if (x.attribute !== undefined)         … mode code …})();
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答