Javascript a、 b<;0,当a.b===未定义时,为什么不引发错误?
一个打字错误最终被认为是错误的Javascript a、 b<;0,当a.b===未定义时,为什么不引发错误?,javascript,node.js,comparison,throw,operands,Javascript,Node.js,Comparison,Throw,Operands,一个打字错误最终被认为是错误的 a.b > 0 带有a.b未定义。根据MDN(),比较对操作数调用.valueOf()。应该如此 a.b.valueOf() > 0 但这实际上抛出了一个似乎没有发生的错误。相反,这似乎是在评估: undefined > 0 我是不是误解了什么 在我的例子中,这导致Node.js代码中出现无声错误。我当然希望抛出一个错误 我可以在不显式检查操作数的情况下处理这个问题吗 编辑:freeCodeCamp似乎比MDN更正确地描述了这一点: 但
a.b > 0
带有a.b
未定义。根据MDN(),比较对操作数调用.valueOf()
。应该如此
a.b.valueOf() > 0
但这实际上抛出了一个似乎没有发生的错误。相反,这似乎是在评估:
undefined > 0
我是不是误解了什么
在我的例子中,这导致Node.js代码中出现无声错误。我当然希望抛出一个错误
我可以在不显式检查操作数的情况下处理这个问题吗
编辑:freeCodeCamp似乎比MDN更正确地描述了这一点: 但我仍然想知道,如何最简单地处理这个问题,而不被简单的打字错误所困扰。请参阅:它的作用:
undefined
已经是一个原语-nothing抛出。然后,它会:
让nx成为?扁桃体(px)
让纽约去吧?扁桃体(py)
将undefined
强制转换为数字也不会抛出,但会返回NaN
:
console.log(编号(未定义))代码>请参见:它的功能:
设r是执行抽象关系比较lval
它,它试图先将每一方强制为一个基元:
a。让px去吧?TopPrimitive(x,提示编号)
b。让我来吧?TopPrimitive(y,提示编号)
undefined
已经是一个原语-nothing抛出。然后,它会:
让nx成为?扁桃体(px)
让纽约去吧?扁桃体(py)
将undefined
强制转换为数字也不会抛出,但会返回NaN
:
console.log(编号(未定义))
如果a未定义且您尝试访问a.b,它可能会引发错误。a是否在您尝试访问a.b时定义?@AlexanderStaroselsky是,正如我所说的a.b
是未定义的(这意味着,a!==undefined
@AlexanderStaroselsky Hm,我在问题中没有写清楚。感谢您指出这一点。“比较调用操作数上的.valueOf()
”-仅当操作数是对象时。它不会在基元上执行此操作values@Leo哦,哇。我现在已经修复了MDN。如果a未定义,而您正试图访问a.b,它可能会引发错误。在您试图访问a.b时,a是否已定义?@AlexanderStaroselsky是的,正如我所说的a.b
是未定义的(这意味着,a!==undefined
@AlexanderStaroselsky Hm,我在问题中没有写清楚。感谢您指出这一点。“比较调用操作数上的.valueOf()
”-仅当操作数是对象时。它不会在基元上执行此操作values@Leo哦,哇。我现在已经修复了MDN。谢谢,这是一个很好的解释。这意味着MDN简化了太多(在我给出的链接中)。不过,我也在寻找一种安全的方法来处理此问题。谢谢,所以我必须显式检查操作数。谢谢,这是一个很好的解释。这意味着MDN将其简化得太多(在我给出的链接中)。不过,我也在寻找一种安全的方法来处理此问题。谢谢,所以我必须显式检查操作数。