2011-08-11 14 views
54

Me encanta CoffeeScript compiles == into the JavaScript === operator. Pero, ¿y si quieres la semántica original de JS ==? Están disponibles? He estudiado minuciosamente la documentación y no encuentro nada que me permita esto.¿CoffeeScript permite semánticas de estilo JavaScript ==?

De manera más general, ¿hay alguna manera de insertar JS planos en mi código CoffeeScript para que el compilador no lo toque?

Preferiría evitar editar la salida compilada de JavaScript, ya que estoy usando Chirpy para autogenerarla en Visual Studio.

+8

¿Por qué necesita '' ==? La forma aceptada de hacer esto es a través de coerción explícita. 'a.toString() === b.toString()' o 'parseInt (a, 10) === parseInt (b, 10)'. '==' no es de fiar, excepto en unos pocos casos específicos que el compilador de script de café debería manejar. –

+0

@Squeegy: en parte una pregunta académica, en realidad, pero en su mayoría estaba buscando una forma más corta de 'parseInt (a, 10) === parseInt (b, 10)'. –

+2

@Joseph - "Pored" es una palabra, y no significa lo mismo que "verter". –

Respuesta

74

Como una posible extensión a esto, hay una manera de inline bloques de JS regulares en código CoffeeScript de modo que no se compila?

Sí, here's the documentation. Debe envolver el código JavaScript en los respaldos (`). Esta es la única forma de que use directamente el == de JavaScript en CoffeeScript. Por ejemplo:

CoffeeScript Fuente [try it]
if `a == b` 
    console.log "#{a} equals #{b}!" 
Compilado JavaScript
if (a == b) { 
    console.log("" + a + " equals " + b + "!"); 
} 

El caso específico de == null/undefined/void 0 es servida por el postfix operador existencial ?:

CoffeeScript Source [try it]
x = 10 
console.log x? 
Compilado JavaScript
var x; 
x = 10; 
console.log(x != null); 
CoffeeScript Fuente [try it]
# `x` is not defined in this script but may have been defined elsewhere. 
console.log x? 
Compilado JavaScript
var x; 
console.log(typeof x !== "undefined" && x !== null); 
+1

Perfecto. El contenedor '\' 'es justo lo que estaba buscando, gracias. –

+5

+1 por mencionar el operador existencial. Estaba buscando == semántica para exactamente ese caso. – yjo

+4

Solo una nota, esto entra en conflicto con la sintaxis del bloque => de Coffescript y la palabra clave 'this'. Si coloca 'this' dentro de los tics, debe cambiarlo a _this o eludir el problema. –

1

Esto no es exactamente la respuesta, pero este problema vino para mí porque jQuery's .text() incluía espacios en blanco y "es" estaba fallando en Coffeescript. Conseguir alrededor de él mediante el uso de funciones de ajuste de jQuery:

$.trim(htmlText) is theExpectedValue 
Cuestiones relacionadas