当前位置: 首页 > 知识库问答 >
问题:

为什么JavaScript没有严格的大于/小于比较运算符?

岳浩
2023-03-14

虽然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)

为什么不呢?我问这个问题完全是希望答案是“嗯,因为它没有”,但我还是在问,以防遗漏这些运营商有一个有趣和/或令人沮丧的历史原因。

共有3个答案

姚才捷
2023-03-14

我不确定你的问题是否有答案。我的猜测是,其预期用途是将数字与字符串(可能还有布尔值)进行比较。它实际上适用于这些情况,就像非严格相等运算符一样。其他任何内容都受任意类型强制规则的约束。[]的“正确”输出是什么

在我看来,他们(Brendan Eich,后来是ECMAScript委员会)只是决定相信开发人员只会比较有意义的东西。或者甚至没有考虑开发者会尝试疯狂的比较。为比较创建额外的运算符只会使语言混乱。别忘了,在处理类型强制时,比较并不是唯一的陷阱,还有加法、减法等。所以我猜他们只是决定遵守允许不同类型之间进行操作的决定。他们认为,当人们知道自己在做什么时,这会对他们有所帮助,但可能没有预料到由此产生的所有困惑。

巫煌
2023-03-14

因为a===btype of a==type of b的简写

晏晨朗
2023-03-14

我只能猜测-

如果
a==b为false,则
a!==b是正确的。总是

但是,这一含义不适用于

如果
x

我认为这有点让人困惑,尽管语言中有很多更糟糕的东西(比如,一般来说,键入强制)。

然而,我认为严格的

 类似资料:
  • 问题内容: 在Swift 3中,如果我使用或,这是一个编译错误 编译错误: 可选类型’Int?’的值 没有包装; 你是说用’!’ 要么 ‘?’? 但如果我与或比较 问题答案: 对于相等运算符来说,支持可选值是很有意义的,因为对于任何整数值变量,这是绝对清楚的: 当且仅当它们的值相同时 另一方面,尚不清楚与的比较应如何起作用: 是小于? 如果我想对数组进行排序以使所有s都在末尾出现,那么我希望小于。

  • 问题内容: 我注意到最近有一段代码直接比较两个整数列表,如下所示: 这似乎有点奇怪,但我想如果所有元素都大于,它将返回,如果每个元素相等或元素大于则返回False 。所以我测试了它: 好的,行得通。和: 但是当它变得更加模糊时: 要么: 结果有点陌生。python实际在做什么?看来它返回的结果偏向于第一个列表,其中最左边的元素大于相应的元素? 问题答案: 从比较序列和其它类型在Python教程:

  • 在检查变量和变量集合是否为空时,比较运算符似乎会枚举大小为2或更大的集合: 但它们不适用于1号收藏: 我知道使用左侧(< code>$null -eq @( $null ))进行空比较是最佳实践,但是有人能解释一下这里发生了什么吗?我怀疑有更微妙的事情发生,影响我写的其他代码。 为什么这两个结果不一样?

  • 比较运算符用于比较两个表达式的结果。如变量 num 加上变量 offset 是否大于0,大于就是一个比较运算符。 比较运算符还分为相等运算符与关系运算符。 相等运算符: == 相等 != 不相等 === 严格相等 !== 严格不相等 关系运算符: > 大于 >= 大于等于 < 小于 <= 小于等于 运算符返回的都是布尔值。 运算符左右的值也被称为操作数。 1. 相等运算符 相等运算符用于判断运算符

  • 问题内容: Swift 1.1包含〜>运算符的声明: 这在Swift中有什么用?它似乎已声明,但未定义任何可利用它的函数。其他开发人员已将其用于响应模式和封送队列之间的封包,但我想知道为什么在标准框架中对其进行了定义。我猜想它可以“保留”一个自定义运算符供开发人员使用,因为它具有最高的优先级。 问题答案: 由于Swift是开源的,我们可以看到将stdlib 包括在内的实际原因:作为Swift 1.

  • 问题内容: 我正在使用JSLint来遍历JavaScript,并且在执行诸如在语句内部进行比较之类的操作时,它返回许多建议以(三个等号)替换==(两个等号)。 有没有性能优势,以代替用? 由于存在许多比较运算符,因此任何性能改进都将受到欢迎。 如果没有进行类型转换,性能会超过==? 问题答案: 身份()运算符的行为与相等()运算符相同,但不进行任何类型转换,并且类型必须相同才能被视为相等。 进行任