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

时间:2013-11-23 14:09:53

标签: javascript operators type-conversion

比尔蜥蜴说明了this answer中使用等于运算符(==)的危险和缺点。然而,关于秘密的“邪恶双胞胎”,>=<=,几乎没有人说过。

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

因此,我的问题是:

  1. 默认情况下,不同类型的元素应该具有可比性吗? 1.1如果不是,返回值应该是多少? falseundefined?请记住,如果a >= b === false,则表示a < b === true
  2. 可以做些什么来避免,以实际的方式,奇怪的情况就像示例中的情况一样?
  3. 由于大于(<)和小于(>)运算符也会进行类型转换,对它们有什么奇怪的情况吗?

1 个答案:

答案 0 :(得分:3)

  

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

这只在您设计语言时才有意义。在JavaScript中,不同类型的值具有可比性,并且比较遵循某些规则。你必须要意识到它们,但我没有看到任何一点讨论“如果规则不同会怎么样”。

  

可以做些什么来以实际的方式避免奇怪的情况   在这个例子中?

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

  

由于大于(&lt;)和小于(&gt;)运算符   也做类型转换,它们有什么奇怪的情况吗?

我确信有,虽然我现在想不到一个。但为什么你认为你的例子很奇怪?由于类型转换,您似乎理解"" == 0,因此难怪您的示例中的所有比较都返回true,因为它们都包含零。