2012-03-06 7 views
6

Me gusta mucho Coffeescript, pero una cosa que me vuelve loco últimamente es escribir problemas con Numbers and Strings en las declaraciones if. Normalmente no es un problema ya que a Javascript no le importa cuando usa ==, pero Coffeescript convierte todas las comparaciones en ===. ¿Hay alguna manera de volver atrás las comparaciones viejas descuidadas? Doy de comer estúpido pero no he encontrado nada en él.Problemas de Typecasting, cómo usar el viejo == en lugar de ===

El motivo es que he convertido el código de otras personas con el brillante http://js2coffee.org/ para que sea más fácil de leer, pero luego introduzco los problemas de encasillamiento ya que las comparaciones == son reemplazadas por ===. Huelga decir que soy perezoso para refactorizar todo el código;).

+0

Gracias por el enlace que se ve muy útil! – asawyer

+0

Por favor, suelte las etiquetas en títulos, saludos y firmas. –

+2

Desafortunadamente, no hay una manera confiable de convertir código JavaScript a CoffeeScript. Si usa js2coffee, úselo como punto de partida. Normalmente, cuando tienes 'a == b', lo que realmente quieres es una comparación numérica como' + a es + b' o una comparación de cadenas como '" # {a} "es" # {b} "'. –

Respuesta

10

Como dijo asawyer, esto es por diseño. Si realmente considera que necesita una comparación == entonces usted puede ponerlo entre comillas sencillas:

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

Correcto, siempre existe la forma de escribir directamente JS. Yo wasnt Está consciente de que trabajar sólo para la comparación dentro de si las declaraciones. Gracias por eso. – thomasf1

+0

No hay problema. Encantado de ayudar. – Jivings

11

Esto es por diseño. Citando el libro CoffeeScript: Accelerated JavaScript Development

CoffeeScript de es y == === tanto a compilar de JavaScript; no hay ninguna forma de para obtener la verificación de igualdad de JavaScript ==, , que es desacertada por JSLint y otros como fuente de muchos momentos de "WTF?" . Vamos a pedir prestado un ejemplo de 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 

Para evitar estos rascadores de cabeza, debe realizar conversiones de tipos explícitamente

+0

Gracias por la cotización. Soy consciente de que es una decisión de diseño y es una buena en principio. Me preguntaba si hay una forma de evitar esto, aunque sea explícitamente necesario (como muchos lenguajes de programación "predeterminados" de la manera correcta, pero a menudo también permiten el camino feo). – thomasf1

Cuestiones relacionadas