【发布时间】:2019-10-30 01:31:27
【问题描述】:
一个错字结束了
a.b > 0
a.b 未定义。根据 MDN (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Greater_than_operator),比较在操作数上调用 .valueOf()。所以应该是
a.b.valueOf() > 0
但这实际上会引发一个似乎不会发生的错误。相反,这似乎被评估了:
undefined > 0
我是不是误会了什么?
在我的例子中,这导致了 Node.js 代码中的静默错误。我当然希望抛出一个错误。
我可以在不明确检查操作数的情况下处理这个问题吗?
编辑:freeCodeCamp 似乎比 MDN 更正确地描述了这一点:
https://guide.freecodecamp.org/javascript/comparison-operators/
但我仍然想知道如何最简单的方法来处理这个问题而不会被简单的拼写错误所困。
【问题讨论】:
-
如果 a 未定义并且您尝试访问 a.b,它可能会引发错误,在您尝试访问 a.b 时是否已定义?
-
@AlexanderStaroselsky 是的,正如我所说,
a.b是undefined(这意味着a !== undefined。 -
@AlexanderStaroselsky 嗯,我没有在问题中清楚地写出来。感谢您指出。
-
"比较在操作数上调用
.valueOf()" - 仅当操作数是一个对象时。它不会在原始值上这样做 -
@Leo 哦,哇。我现在已经修复了 MDN。
标签: javascript node.js comparison throw operands