【问题标题】:How to check is property existed in function-object (Javascript)如何检查函数对象中是否存在属性(Javascript)
【发布时间】:2016-01-17 10:10:27
【问题描述】:

这个关于 JavaScript with function-Object 的问题。

我有一个类似的功能:

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”根本不存在。

【问题讨论】:

  • 可以设置 this.Age = null; (空!== 未定义)

标签: javascript function object properties


【解决方案1】:

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

你可以简单地使用

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

}

或者

if('Age' in this){

}

【讨论】:

  • 请注意,这两个选项的行为略有不同。如果Age 位于对象中的任何位置(包括原型中),则第二个为真。只有当Age 是对象上的直接属性(而不仅仅是原型上)时,第一个才是真的。
  • 另外,请注意属性可以存在,但分配的值为undefined,因此您无法测试undefined 以查看该属性是否存在。 .hasOwnProperty() 可能是测试给定属性是否已专门分配给该对象的最佳选择。
  • 反正不初始化'Age'属性是不行的,所以必须初始化
  • 感谢您的回答。我尝试使用“hasOwnProperty”和“in”来区分。但返回的相同值是“未定义”。 “hasOwnProperty”仅用于 Javascript 中的普通对象。这是一个不正常的“函数对象”。所以它不起作用。
【解决方案2】:

obj.Age已经存在。如果你想要它,那么你必须将它初始化为 nullundefined 然后你可以检查像

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

}

【讨论】:

    【解决方案3】:

    您只想检查它是否存在?使用if 语句

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

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

    【讨论】:

    • false、0、空字符串("")、NaN、null、undefined都变为false。
    猜你喜欢
    • 2020-11-30
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2020-06-20
    • 2020-08-08
    • 2021-12-27
    • 2016-09-24
    • 1970-01-01
    相关资源
    最近更新 更多