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

2022-01-24 00:00:00 javascript coffeescript

我喜欢 CoffeeScript 将 == 编译成 JavaScript === 运算符.但是如果你想要原始的 JS == 语义怎么办?它们可用吗?我仔细阅读了文档,但找不到任何支持此功能的内容.

I love that CoffeeScript compiles == into the JavaScript === operator. But what if you want the original JS == semantics? Are they available? I've pored over the documentation and can't find anything enabling this.

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

More generally, is there a way to inline plain JS into my CoffeeScript code so that the compiler doesn't touch it?

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

I'd prefer to avoid editing the compiled JavaScript output, since I'm using Chirpy to auto-generate it in Visual Studio.

推荐答案

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

As a possible extension to this, is there a way to inline blocks of regular JS into CoffeeScript code so that it isn't compiled?

是的,这是文档.您需要将 JavaScript 代码包装在反引号 (`) 中.这是您在 CoffeeScript 中直接使用 JavaScript 的 == 的唯一方法.例如:

Yes, here's the documentation. You need to wrap the JavaScript code in backticks (`). This is the only way for you to directly use JavaScript's == in CoffeeScript. For example:

if `a == b`
  console.log "#{a} equals #{b}!"

编译好的 JavaScript

Compiled JavaScript

if (a == b) {
  console.log("" + a + " equals " + b + "!");
}

<小时>

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


The specific case of == null/undefined/void 0 is served by the postfix existential operator ?:

x = 10
console.log x?

编译好的 JavaScript

Compiled JavaScript

var x;
x = 10;
console.log(x != null);

CoffeeScript 源 [试试]

CoffeeScript Source [try it]

# `x` is not defined in this script but may have been defined elsewhere.
console.log x?

编译好的 JavaScript

Compiled JavaScript

var x;
console.log(typeof x !== "undefined" && x !== null);

相关文章