有没有办法区分未设置的属性和设置为未定义的属性? [复制]
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中有什么方法可以在这里区分a
和b
吗?我主要是出于好奇才问的,我没有用例。
【问题讨论】:
刚刚找到了一个可能的答案——使用Object.keys(testObject)
。
我想你在找undefined
和null
不,我不是。我不知道会给你什么印象。我对 JavaScript 并不陌生。
由于您不是 JavaScript 新手,因此您肯定知道 developer.mozilla.org/en/docs/Web/JavaScript/Reference/…。这确实导致了您想要区分undefined
和null
的假设。如果没有,你的问题没有多大意义......
如果你转到我的个人资料并查看我的最高投票答案,那就特别有趣。
【参考方案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 ?
设置 @JsonIgnoreProperties(ignoreUnknown = true) 时,有没有办法检测未映射的 json 属性?