2012-03-06 39 views
6

我真的很喜歡Coffeescript,但最近讓我發瘋的一件事是在if語句中用Numbers和Strings鍵入問題。通常情況下,使用==時Javascript並不在意,但Coffeescript會將所有比較轉換爲===。有沒有辦法讓馬虎舊的==比較回來?我喂愚蠢,但我沒有發現任何東西。類型轉換問題,如何使用==而不是== ==

其原因是我使用輝煌的http://js2coffee.org/轉換其他人的代碼,使其更容易閱讀,但隨後我輸入了類型轉換問題,因爲==比較被替換爲===。不用說我會懶得重構整個代碼;)。

+0

感謝,看起來真的很有用的鏈接! – asawyer 2012-03-06 13:48:42

+0

請將標籤放在標題,問候和簽名中。 – 2012-03-06 13:50:27

+2

不幸的是,沒有可靠的方法將JavaScript代碼轉換爲CoffeeScript。如果您使用js2coffee,請將其作爲起點。通常,當你有'a == b'時,你真正想要的是像'+ a is + b'這樣的數字比較,或者像'「#{a}」那樣的字符串比較是「#{b}」。 – 2012-03-06 15:32:12

回答

10

正如asawyer說,這是由設計。如果你真的覺得你需要一個==比較,那麼你可以把它放在反引號:

if `foo == bar` 
    alert 'Sloppy comparison true' 
+0

對,總是有直接寫JS的方式。我沒有意識到它僅僅用於if語句中的比較。感謝那。 – thomasf1 2012-03-06 15:09:12

+0

沒問題。樂意效勞。 – Jivings 2012-03-06 15:35:06

11

這是設計。 從書中引用CoffeeScript: Accelerated JavaScript Development

CoffeeScript的is和==都編譯成JavaScript的===;沒有 的方式來獲得鬆散的,類型強制的JavaScript ==, 的平等檢查,這是由JSLint和其他人作爲許多 「WTF?」時刻的來源所不支持的。讓我們借用 http://wtfjs.com/2011/02/11/all-your-commas-are-belong-to-Array一個例子:

",,," == new Array(4) // true 
There are also cases where == isn’t transitive: 
'' == '0' // false 
0 == '' // true 
0 == '0' // true 

爲了避免這些頭刮管,你應該進行類型轉換 明確

+0

感謝您的報價。我知道這是一個設計決定,它是一個很好的主意。我想知道是否有解決方法,但如果明確需要的話(許多編程語言「默認」是正確的方式,但通常也允許醜陋的方式)。 – thomasf1 2012-03-06 15:04:03