【问题标题】:Equal but not greater-or-equal?相等但不大于或等于?
【发布时间】:2013-12-17 19:22:28
【问题描述】:

undefined比较任何东西已经讨论过很多次了,但是今天我不得不比较数组中的项目,在某些时候,数组中的项目可能是undefined,我很好奇它们将如何相互比较.我发现undefined == undefinedtrue,但同时undefined >= undefined 不是true。等一下,如果某事是相等的,那么大于或等于也意味着是真的?这就是逻辑的运作方式!

我可以接受 ECMA 标准所说的任何内容,我相信这些人是理智的,并且有充分的理由做任何事情。但是到底什么可能是这种比较行为的原因呢?如果我正在实现undefined,我将返回undefined,用于以undefined 作为操作数的任何比较。但是他们选择返回boolean,那为什么结果是这样的呢?

现在我认为最好的解决方案是使用多个if 语句以特殊方式处理undefined 的任何外观。

    undefined === undefined: true
    undefined == undefined: true

    undefined !== undefined: false
    undefined != undefined: false
    undefined < undefined: false
    undefined > undefined: false
    undefined <= undefined: false
    undefined >= undefined: false

【问题讨论】:

  • ECMA 标准描述并标准化了 JavaScript 这种古怪语言的现有行为。
  • 有趣...奇怪的是null &gt;= null返回true。
  • 我想我们需要知道这些比较是如何实现的:) +1,有兴趣。
  • 如果您打算使用== 而不是=== 和其他进行类型转换的比较,那么您必须能够理解所有各种类型转换是如何工作的,这是公平的复杂。
  • 两个undefined的比较是否意味着类型转换?它们被转换成什么类型​​?

标签: javascript boolean


【解决方案1】:

但究竟是什么原因导致了这种比较行为?

ECMAScript 规范并不是为了描述 JavaScript应该如何工作,而是为了描述 JavaScript实际上是如何工作的。

该语言在 Netscape Navigator 中被迅速实现,并且包含许多诸如此类的“错误”,然后在 IE 的实现中被复制。最终,ECMAScript 被标准化了,但直到 JavaScript 广泛存在之后。标准化任何已经在使用的语言都需要一定程度的向后兼容性。

&lt;=&gt;=== 不同,仅仅是因为 the standard says so。标准这么说是因为它们最初是这样实施的。

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 2012-10-14
    • 2013-11-11
    相关资源
    最近更新 更多