javascript - 'greater than or equal' 和 'equality' 运算符关于 'undefined' 的行为不一致

标签 javascript

如果相等(严格或不严格)运算符对于 undefined 返回 true...

console.log(undefined == undefined)

...为什么大于或等于运算符返回 false?

console.log(undefined >= undefined)

MDN page表示使用 Abstract Relational Comparison 比较操作数,但指的是大于(或小于)部分。因此,在我看来,大于或等于应该提供相同的相等算法,这不是正确的吗?

最佳答案

Thus, it seems to me that the greater than or equal should provide the same algorithm for equality, isn't that correct?

不,这里不涉及该算法。规范defines the evaluation of >=作为

  1. Let lref be the result of evaluating RelationalExpression.
  2. Let lval be ? GetValue(lref).
  3. Let rref be the result of evaluating ShiftExpression.
  4. Let rval be ? GetValue(rref).
  5. Let r be ? IsLessThan(lval, rval, true).
  6. If r is true or undefined, return false. Otherwise, return true.

所以唯一涉及的算法是 IsLessThan ,如果其操作数还不是数字(或字符串),则会将其转换为数字。

未定义 获取 converted to NaNNumber::lessThan如果任何操作数为 NaN,则返回 undefined,根据上面的步骤 6,结果为 false

关于javascript - 'greater than or equal' 和 'equality' 运算符关于 'undefined' 的行为不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71843914/

相关文章:

javascript - 如何在javascript中将元素从一个数组复制到另一个数组?

javascript - Backbone.js 共享上下文模型

javascript - 是否可以使用 HTTP PUT 提交表单数据?

javascript - 在窗口外部单击时自动关闭模态,但在模态窗口内部单击时保持打开状态

javascript - Node.js 密码重置

javascript - XMLHttpRequest 和 Web Workers Access-Control-Origin

javascript - 引用错误: document is not defined at compile/Electron

Javascript:settimeout递归无限堆栈增加?

javascript - 使用node-twitter发推文时出现错误401

javascript - Quill Link 工具提示默认不可见