2012-03-06 6 views
6

Bardzo lubię Coffeescript, ale ostatnio jedna z rzeczy, która doprowadza mnie do szału, jest problem z Numbers and Strings w instrukcjach if. Zwykle nie jest to problemem, ponieważ JavaScript nie obchodzi, kiedy używa się ==, ale Coffeescript konwertuje wszystkie porównania na ===. Czy istnieje sposób na odzyskanie niechlujnych starych porównań ==? Karmię się głupio, ale niczego nie znalazłem.Problemy z typowaniem, jak używać dobrego starego == zamiast ===

Powodem jest to, że przekonwertowałem kod innych ludzi przy użyciu genialnego http://js2coffee.org/, aby ułatwić czytanie, ale potem wprowadzam problemy z typowaniem, ponieważ porównania == są zastępowane przez ===. Nie trzeba dodawać, że jestem leniwy, żeby zmienić cały kod;).

+0

Dzięki za link, który wygląda bardzo przydatne! – asawyer

+0

Upuść tagi, tytuły, pozdrowienia i podpisy. –

+2

Niestety, nie ma niezawodnego sposobu na konwersję kodu JavaScript na CoffeeScript. Jeśli używasz js2coffee, użyj go jako punktu wyjścia. Zwykle, gdy miałeś 'a == b', to, czego naprawdę chcesz, to porównanie liczbowe, takie jak' + a is + b' lub porównywanie ciągów jak '" # {a} "to" # {b} "'. –

Odpowiedz

10

Jak asawyer powiedział, jest to zgodne z projektem. Jeśli naprawdę że trzeba się porównanie == następnie można umieścić go w backticks:

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

Dobrze, zawsze istnieje sposób bezpośredniego pisania JS. Nie zdawałem sobie sprawy, że to działa tylko dla porównania wewnątrz instrukcji if. Dziękuję za to. – thomasf1

+0

Bez problemu. Miło, że mogłem pomóc. – Jivings

11

Jest to zgodne z projektem. Cytując z książki CoffeeScript: Accelerated JavaScript Development

coffeescript jest i == zarówno skompilować do === Javascript w; nie ma sposobu, aby uzyskać luźną, wymuszającą typ kontrolę jakości JavaScriptu ==, , która jest niezadowolona z powodu JSLinta i innych, jako źródła wielu momentów "WTF?" o wartości . Załóżmy pożyczyć przykład z 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 

Aby uniknąć tych czołowo scratchers należy wykonać typu konwersji wyraźnie

+0

Dzięki za cytat. Mam świadomość, że jest to decyzja projektowa i jest w zasadzie dobra. Zastanawiałem się, czy jest jakiś sposób obejścia tego, choć wyraźnie potrzebny (jako że wiele języków programowania "domyślnie" we właściwy sposób, ale często pozwala również na brzydki sposób). – thomasf1

Powiązane problemy