【问题标题】: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' 为假。

标签: javascript coffeescript


【解决方案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 

【讨论】:

    猜你喜欢
    • 2016-11-26
    • 2016-06-22
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 2016-10-16
    • 2016-03-21
    相关资源
    最近更新 更多