如何检查函数对象(Javascript)中是否存在属性

如何检查函数对象(Javascript)中是否存在属性,javascript,function,object,properties,Javascript,Function,Object,Properties,这个问题是关于带函数对象的JavaScript的 我有一个类似于: function person(){ this.name = 'Tom', this.Age //not set any value } 我通过“person”函数创建了一个对象: var obj = new person(); obj.name //Tom obj.Age //undefined obj.DOB //also returned undefined 如何区分“obj”中已经存在“Age”属性但没有值,或者“

这个问题是关于带函数对象的JavaScript的

我有一个类似于:

function person(){
this.name = 'Tom',
this.Age //not set any value
} 
我通过“person”函数创建了一个对象:

var obj = new person();
obj.name //Tom
obj.Age //undefined
obj.DOB //also returned undefined

如何区分“obj”中已经存在“Age”属性但没有值,或者“DOB”根本不存在。

您只想检查它是否存在?如果使用
语句,请使用

if (obj.Age) {
  // do stuf
} else {
  // do other stuff
}

undefined作为falsy值返回if语句,因此如果它不在那里,它将执行else语句。如果它确实存在,则第一个块。

obj.Age
不存在。如果需要,则必须将其初始化为
null
undefined
然后你可以像这样检查

if(obj.hasOwnProperty('Age')){

}

JavaScript区分了null和undefined,null是一个表示故意非值的值(只能通过null关键字访问),undefined是一个类型为undefined的值,表示未初始化的值,也就是说,一个值甚至还没有被赋值

你可以简单地使用

if(this.hasOwnProperty('Age')){

}


您可以将其设置为。Age=null;(null!==未定义)false,0,空字符串(“”)、NaN、null和undefined都将变为false。请注意,这两个选项的行为略有不同。如果
Age
位于对象中的任何位置(包括原型中),则第二个选项将为true。只有
Age
是对象的直接属性(而不仅仅是原型上)时,第一个选项才为true。另外,请注意,属性可以存在,但其赋值为
未定义
,因此无法测试
未定义
,以查看该属性是否存在。
.hasOwnProperty()
可能是测试给定属性是否已专门分配给此对象的最佳选择。无论如何,如果您不初始化
'Age'
属性,它将不起作用,因此必须初始化谢谢您的回答。我尝试使用“hasOwnProperty”和“in”来区分。但返回的值相同未定义。“hasOwnProperty”仅用于Javascript中的普通对象。这是一个不正常的“函数对象”。因此它不起作用。
if('Age' in this){

}