Javascript中<=和>=的危险。如何避免它们?



Bill the Lizard在这个答案中说明了使用等式运算符(==)的危险和缺点。然而,关于秘密的"邪恶双胞胎">=<=,人们几乎没有说什么。

0 >= ''      // true
0 <= ''      // true
'' >= 0      // true    
'' <= 0      // true

因此,我的问题是:

  1. 默认情况下,不同类型的元素是否应该具有可比较性
    1.1如果没有,返回的值应该是多少?falseundefined?请记住,如果是a >= b === false,这意味着a < b === true
  2. 有什么可以避免的呢,以一种实用的方式,奇怪的情况如示例中的情况
  3. 由于大于(<)和小于(>)运算符也进行类型转换,它们有什么奇怪的情况吗

默认情况下,不同类型的元素是否应该具有可比较性?

只有当你在设计一种语言时,这才重要。在JavaScript中,不同类型的值是可比较的,并且比较遵循某些规则。你必须意识到它们,但我认为讨论"如果规则不同怎么办"没有任何意义。

在实际操作中,可以做些什么来避免出现这种奇怪的情况在示例中?

只是要避免比较不同类型的值,如果在大多数情况下,这是没有意义的。唯一有用的情况是将数字字符串与数字进行比较。在这种情况下,JavaScript的行为正如任何人所期望的那样,没有奇怪的结果。

由于大于(<)和小于(>)运算符也做类型转换,有什么奇怪的情况吗?

我肯定有,尽管我现在想不出一个。但为什么你觉得你的例子很奇怪?您似乎理解"" == 0是因为类型转换,所以难怪示例中的所有比较都返回true,因为它们都包含零。

最新更新