2012-03-06 14 views
6

Mi piace molto il Coffeescript, ma una cosa che mi fa impazzire ultimamente è il tipo di problemi con le istruzioni di Numbers and Strings in if. Normalmente non è un problema dato che Javascript non ha importanza quando si utilizza ==, ma Coffeescript converte tutti i confronti in ===. C'è un modo per riportare indietro vecchi vecchi == Mi nutro stupido ma non ho trovato nulla su di esso.Problemi di tipizzazione, come usare il buon vecchio == invece di ===

Il motivo è che ho convertito il codice di altre persone usando il brillante http://js2coffee.org/ per renderlo più facile da leggere, ma poi inserisco i problemi di typecasting come == i confronti sono sostituiti da ===. Inutile dire che sono fottutamente pigro a rifattorizzare l'intero codice;).

+0

Grazie per il link che sembra davvero utile! – asawyer

+0

Lascia cadere i tag in titoli, saluti e firme. –

+2

Sfortunatamente, non esiste un modo affidabile per convertire il codice JavaScript in CoffeeScript. Se usi js2coffee, usalo come punto di partenza. Di solito, quando avevi 'a == b', quello che vuoi veramente è un confronto numerico come' + a is + b' o un confronto tra stringhe come '" # {a} "è" # {b} "'. –

risposta

10

Come ha detto asawyer, questo è di progettazione. Se davvero sipensa che è necessario un confronto == allora si può mettere in backticks:

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

Esatto, c'è sempre il modo di scrivere direttamente JS. Non ero a conoscenza del fatto che stia funzionando solo per il confronto all'interno delle dichiarazioni. Grazie per quello. – thomasf1

+0

Nessun problema. Felice di aiutare. – Jivings

11

Questo è di progettazione. Citando dal libro CoffeeScript: Accelerated JavaScript Development

CoffeeScript di è e == sia compilare a === di JavaScript; non c'è il modo per ottenere il controllo di uguaglianza libera, coercitiva del tipo di JavaScript ==, che è disapprovato da JSLint e altri come la fonte di molti momenti "WTF?" di . Facciamo prendere in prestito un esempio da 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 

Per evitare questi testa-scratchers, è necessario eseguire conversioni di tipo esplicitamente

+0

Grazie per la citazione. Sono consapevole che si tratta di una decisione di progettazione ed è una buona idea in linea di principio. Mi chiedevo se c'è un modo per aggirare questo, anche se esplicitamente necessario (dato che molti linguaggi di programmazione sono "predefiniti" nel modo giusto, ma spesso consentono anche il modo brutto). – thomasf1

Problemi correlati