为什么 CoffeeScript 不支持 `==`?

Why does CoffeeScript not support `==`?

我正在学习 CoffeeScript 并正在使用 js2.coffee 将我的 Javascript 文件转换为 CoffeeScript。有几行,它警告我

Operator '==' is not supported in CoffeeScript, use '===' instead.

这背后的原理是什么? 为什么 CoffeeScript 不支持 ==

出于与大多数 Linter 警告您不要使用它相同的原因。

这是一个奇怪的实现运算符,具有令人惊讶的副作用。

"\n\t" == false
// => true

有很多关于该主题的文章,但最值得注意的是 == 运算符列出了 Douglas Crockford 的 things to avoid

实际上,CoffeeScript 将 == 编译为 JavaScript 的 ===(并将 != 编译为 !==,如您在 documentation 中所见).

所以底线是,它不支持它。我猜这是因为 == 在检查相等性之前进行了类型转换 如果 操作数是不同的类型。由于其 意外结果 性能 ,此转换是一种不受欢迎的做法。

关于== vs ===的问题网上讨论很多。 MDN docs 帮助我更好地理解了这个问题。