CoffeeScript 是不是允许 JavaScript 风格的 == 相等语义?

Posted

技术标签:

【中文标题】CoffeeScript 是不是允许 JavaScript 风格的 == 相等语义?【英文标题】:Does CoffeeScript allow JavaScript-style == equality semantics?CoffeeScript 是否允许 JavaScript 风格的 == 相等语义? 【发布时间】:2011-10-25 08:00:38 【问题描述】:

我喜欢CoffeeScript compiles == into the javascript === operator。但是如果你想要原始的 JS == 语义怎么办?它们可用吗?我仔细阅读了文档,但找不到任何支持此功能的内容。

更一般地说,有没有办法将纯 JS 内联到我的 CoffeeScript 代码中,这样编译器就不会碰到它?

我宁愿避免编辑编译后的 JavaScript 输出,因为我使用 Chirpy 在 Visual Studio 中自动生成它。

【问题讨论】:

为什么需要==?执行此操作的公认方法是通过显式强制。 a.toString() === b.toString()parseInt(a, 10) === parseInt(b, 10)== 是不可信任的,除了极少数特定情况,可以说应该由咖啡脚本编译器为您处理。 @Joseph - “Pored”是一个词,与“poured”的意思不同。 我的意思只是说大多数咖啡脚本编写者会坚持认为使用反引号是“做错了”。但如果你对此很酷,那就发疯吧:) @Justin +a === +b 将在该示例中执行您想要的操作。袖手旁观的好小技巧。 :) @TrevorBurnham 除非您知道 ab 包含整数值,否则这并不等同。例如,parseInt('2.3', 10) === parseInt('2.4', 10) 为真,但+'2.3' === +'2.4' 为假。 【参考方案1】:

作为对此的可能扩展,有没有办法将常规 JS 块内联到 CoffeeScript 代码中,这样它就不会被编译?

是的,here's the documentation。您需要将 JavaScript 代码包装在反引号 (`) 中。这是您在 CoffeeScript 中直接使用 JavaScript 的 == 的唯一方法。例如:

CoffeeScript 源码[try it]
if `a == b`
  console.log "#a equals #b!"
编译好的 JavaScript
if (a == b) 
  console.log("" + a + " equals " + b + "!");


== null/undefined/void 0的具体情况由后缀存在运算符?服务:

CoffeeScript 源码[try it]
x = 10
console.log x?
编译好的 JavaScript
var x;
x = 10;
console.log(x != null);
CoffeeScript 源码[try it]
# `x` is not defined in this script but may have been defined elsewhere.
console.log x?
编译好的 JavaScript
var x;
console.log(typeof x !== "undefined" && x !== null);

【讨论】:

完美。 ` 包装正是我想要的,谢谢。 +1 用于提及存在运算符。我正在为这种情况寻找 == 语义。 请注意,这与 Coffescript 的 => 块语法和 this 关键字冲突。如果你把this放在刻度里面,你需要把它改成_this或者绕过这个问题。【参考方案2】:

这不完全是答案,但这个问题出现在我身上,因为 jQuery 的 .text() 包含空格,而“is”在 Coffeescript 中失败。使用 jQuery 的 trim 函数绕过它:

$.trim(htmlText) is theExpectedValue 

【讨论】:

以上是关于CoffeeScript 是不是允许 JavaScript 风格的 == 相等语义?的主要内容,如果未能解决你的问题,请参考以下文章

CoffeeScript 转换代码是不是错误?

CoffeeScript 中是不是遗漏了 `do...while` 循环...?

在 JavaScript/CoffeeScript 中确定一个数组是不是包含另一个数组的内容

Javascript/Coffeescript/jQuery 中是不是有与 Ruby 的发送等效的内容?

CoffeeScript 是不是支持单引号字符串中的插值?

如何将 Coffeescript 2 视为 JSX? (网络包/通天塔)