Проблемы с типизацией, как использовать старый добрый == вместо === - PullRequest
6 голосов
/ 06 марта 2012

Мне действительно нравится Coffeescript, но одна вещь, которая в последнее время сводит меня с ума, это проблемы с типами в Numbers и Strings в операторах if. Обычно это не проблема, так как Javascript не волнует, когда вы используете ==, но Coffeescript преобразует все сравнения в ===. Есть ли способ вернуть неаккуратные старые == сравнения? Я тупо кормлю, но ничего на нем не нашел.

Причина этого в том, что я преобразовал код других людей, используя блестящий http://js2coffee.org/, чтобы его было легче читать, но затем я сталкиваюсь с проблемами приведения типов, когда == сравнения заменяются на ===. Само собой разумеется, я ленивый, чтобы реорганизовать весь код;).

Ответы [ 2 ]

11 голосов
/ 06 марта 2012

Это по замыслу.Цитата из книги CoffeeScript: ускоренная разработка JavaScript

CoffeeScript - и == оба компилируются в 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

Чтобы избежать этих головокружительных действий, вы должны явно выполнять преобразования типов

10 голосов
/ 06 марта 2012

Как сказал Асойер, это сделано намеренно. Если вы действительно думаете, что вам нужно сравнение ==, то вы можете поставить его в чертах:

if `foo == bar`
  alert 'Sloppy comparison true'
...