【发布时间】:2018-06-13 11:56:17
【问题描述】:
以下是JS中正常的属性检查:
if (x.prop && Array.isArray(x.prop) ) ...
快捷方式的计算结果为 x.prop === undefined,而表达式的计算结果为 false。但是:
var o = {a: NaN};
if (o.a && isNaN(o.a)) ...
导致(NaN && true) -> (NaN) -> (false) 的强制,因此具有属性'a' 并且它是NaN 的条件永远不会被评估为真。
似乎我无法像检查大多数其他属性一样检查支持 NaN 的属性。我一直在“做错事”,还是应该一直使用o.hasOwnProperty()?还是typeof (o.prop) === 'undefined'?或者这只是一个 JS 怪癖,两个条件都有效但不能组合,因为它是 JS。
什么是“最佳实践”? (为什么?)最好,我会优先考虑正确性、可读性和速度(按此顺序)。
【问题讨论】:
-
您可以使用
("a" in o)查看是否有一个名为“a”的属性,其值为any(包括undefined)。 -
哦,这对我来说是个新闻!谢谢!
-
你为什么不直接使用
if (Array.isArray(x.prop))?
标签: javascript object nan