慕田峪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请注意:它无法区分原型上有相同属性的情况和实例上相同的属性-它只是假设它来自原型。根据您的情况,您可以将其改为更宽松或更严格,但至少这应该更有帮助。