【问题标题】:Is there any way to distinguish between an unset property and a property set to undefined? [duplicate]有没有办法区分未设置的属性和设置为未定义的属性? [复制]
【发布时间】:2017-09-02 16:54:23
【问题描述】:

假设我有对象testObject = {a: undefined}。如果我然后console.log(testObject.a),我会不确定。但是如果我console.log(testObject.b) 不存在,也会发生同样的情况。 JavaScript中有什么方法可以在这里区分ab吗?我主要是出于好奇才问的,我没有用例。

【问题讨论】:

  • 刚刚找到了一个可能的答案——使用Object.keys(testObject)
  • 我想你在找undefinednull
  • 不,我不是。我不知道会给你什么印象。我对 JavaScript 并不陌生。
  • 由于您不是 JavaScript 新手,因此您肯定知道 developer.mozilla.org/en/docs/Web/JavaScript/Reference/…。这确实导致了您想要区分undefinednull 的假设。如果没有,你的问题没有多大意义......
  • 如果你转到我的个人资料并查看我的最高投票答案,那就特别有趣。

标签: javascript


【解决方案1】:

hasOwnProperty() 方法返回一个布尔值,指示对象是否具有指定的属性作为自己的(非继承的)属性。

在特定情况下-

  testObject = {a: undefined};

  testObject.hasOwnProperty('a') // true
  testObject.hasOwnProperty('b') // false

【讨论】:

  • 只是一个指针。您应该尝试解释为什么您所做的更改会起作用。只是说Try this,不是一个好的答案
【解决方案2】:

在使用in 运算符进行检查之前,您实际上可以通过额外条件进行区分

if(a in testObject) {
  // it's there .. now check whether it is undefined or not
}

【讨论】:

  • in 也将传递原型上的属性,并且对于不可枚举的属性将失败
【解决方案3】:
testObject.hasOwnProperty('a')

请注意,这仅适用于您展示的对象;从原型继承的属性不会通过这个测试(这是hasOwnProperty 的重点)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-30
    • 2023-02-10
    • 2022-10-25
    • 2021-08-15
    • 2021-11-27
    • 2019-07-04
    • 2022-11-19
    相关资源
    最近更新 更多