2013-11-23 28 views
2

比爾蜥蜴聲明在this answer中使用等號運算符(==)的危險和缺點。然而,關於臥底「邪惡雙胞胎」>=<=的報道很少。<= and > =在Javascript中的風險。如何避免它們?

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

因此,我的問題是:

  1. 不同類型應該元素默認可比性?
    1.1如果不是,應該返回什麼值? falseundefined?請記住,如果a >= b === false,這意味着a < b === true
  2. 可以做些什麼來避免,以實用的方式,奇怪的情況下,例如?
  3. 由於大於(<)和小於(>)的操作符也會進行類型轉換,所以它們有沒有奇怪的情況?
+1

只是javascript的危險,我猜。 [WAT](https://www.destroyallsoftware.com/talks/wat) –

+2

[This](http://stackoverflow.com/questions/13091058/best-and-or-shortest-way-to-do-strict非類型轉換 - 比較)可能是感興趣的。 –

+0

偉大的問題。按照約定,我會在這種情況下進行類型轉換,因爲0 <''沒有意義,而0 ==''類。另外,FWIW,===也不是防彈的。 +0 === -0,根據http://ecma262-5.com/ELS5_HTML.htm#Section_11.9.6 – bishop

回答

3

默認情況下不同類型的元素是否可比?

這隻在設計語言時才重要。在JavaScript中,不同類型的值是可比較的,比較遵循特定的規則。你必須意識到它們,但是我沒有看到討論「如果規則不同」會有什麼意義。

在示例中,可以採取什麼措施避免以實際方式出現的奇怪情況: ?

只是爲了避免比較不同類型的值,如果大多數情況下沒有意義。有用的唯一情況是將數字字符串與數字進行比較。在這種情況下,JavaScript的行爲與任何人所期望的一樣,沒有奇怪的結果。

由於大於(<)和小於(>)運營商 也做類型轉換,是否有任何奇數的情況下又在哪裏?

我確定有,雖然我現在想不到一個。但爲什麼你認爲你的例子很奇怪?由於類型轉換,您似乎明白"" == 0,所以難怪您的示例中的所有比較返回true,因爲它們都包含零。

相關問題