虽然JavaScript的类型严格比较运算符(===
,!==
)很好,但它没有相应的严格比较更大/更小.
var x = 10;
x <= 20; // true
x <= '20'; // true
x <== 20; // true (or would be, if JS had such an operator)
x <== '20'; // false (ditto)
Run Code Online (Sandbox Code Playgroud)
为什么不?我问这个问题充分期待答案是"呃,因为它没有",但我无论如何都要问,以防这些操作符被忽略有一个有趣和/或令人沮丧的历史原因.
goa*_*oat 25
我只能猜测 -
如果
a === b
是假的话,那
a !== b
就是真的.永远.
但是,这种含义并不适用 <==
如果
x <== 20
为false,我们无法推断结果,
x >== 20
因为它可能由于类型检查或关系检查而为假.
我认为这有点令人困惑,尽管语言中有很多东西要糟糕得多(一般来说类型强制,一个名字).
但是,我认为严格<
或>
表现一致.
Nie*_*sol 22
既然a === b
是简写typeof a == typeof b && a == b
,你可以使用这种扩展来表示不等式:typeof a == typeof b && a <= b
例如.
我不确定您的问题是否有答案。我的猜测是,预期用途是将数字与字符串(可能是布尔值)进行比较。它实际上适用于这些情况,就像非严格相等运算符一样。无论如何,任何其他内容都必须遵守任意类型的强制规则。什么是“正确”的输出[] < {}
?false
?也许undefined
吧?请注意,类型甚至不必相同,({foo: 1}) < {bar : 2}
也没有任何意义。
在我看来,他们(Brendan Eich和后来的ECMAScript委员会)只是决定相信开发人员只会比较比较有意义的东西。甚至根本没有考虑过开发人员会尝试疯狂的比较。创建额外的运算符进行比较只会使语言混乱。并且不要忘记,比较不是处理类型强制时的唯一陷阱,还有加,减等。因此,我猜他们只是决定忠实于允许在不同类型之间进行操作的决定。他们认为这会在人们知道自己在做什么时会有所帮助,但也许并没有想到由此而引起的所有混乱。
归档时间: |
|
查看次数: |
13015 次 |
最近记录: |