Bill the Lizard在这个答案中说明了使用等式运算符(==
)的危险和缺点。然而,关于秘密的"邪恶双胞胎">=
和<=
,人们几乎没有说什么。
0 >= '' // true
0 <= '' // true
'' >= 0 // true
'' <= 0 // true
因此,我的问题是:
- 默认情况下,不同类型的元素是否应该具有可比较性
1.1如果没有,返回的值应该是多少?false
?undefined
?请记住,如果是a >= b === false
,这意味着a < b === true
- 有什么可以避免的呢,以一种实用的方式,奇怪的情况如示例中的情况
- 由于大于(
<
)和小于(>
)运算符也进行类型转换,它们有什么奇怪的情况吗
默认情况下,不同类型的元素是否应该具有可比较性?
只有当你在设计一种语言时,这才重要。在JavaScript中,不同类型的值是可比较的,并且比较遵循某些规则。你必须意识到它们,但我认为讨论"如果规则不同怎么办"没有任何意义。
在实际操作中,可以做些什么来避免出现这种奇怪的情况在示例中?
只是要避免比较不同类型的值,如果在大多数情况下,这是没有意义的。唯一有用的情况是将数字字符串与数字进行比较。在这种情况下,JavaScript的行为正如任何人所期望的那样,没有奇怪的结果。
由于大于(<)和小于(>)运算符也做类型转换,有什么奇怪的情况吗?
我肯定有,尽管我现在想不出一个。但为什么你觉得你的例子很奇怪?您似乎理解"" == 0
是因为类型转换,所以难怪示例中的所有比较都返回true
,因为它们都包含零。