有没有办法区分未设置的属性和设置为未定义的属性? [复制]

Posted

技术标签:

【中文标题】有没有办法区分未设置的属性和设置为未定义的属性? [复制]【英文标题】: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 的假设。如果没有,你的问题没有多大意义...... 如果你转到我的个人资料并查看我的最高投票答案,那就特别有趣。 【参考方案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 的重点)。

【讨论】:

以上是关于有没有办法区分未设置的属性和设置为未定义的属性? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Firebug 不为未定义的属性显示“未捕获的类型错误”?

无法访问 json 对象属性和值在 rails 视图中显示为未定义

有没有办法通过 react-virtualized 将 ref 设置为 List ?

NodeJS JSON 文件的属性在编辑属性后重置为未定义

设置 @JsonIgnoreProperties(ignoreUnknown = true) 时,有没有办法检测未映射的 json 属性?

有没有办法在 WinForms .NET 3.5 应用程序中为未处理的异常定义操作?