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 除非您知道 a
和 b
包含整数值,否则这并不等同。例如,parseInt('2.3', 10) === parseInt('2.4', 10)
为真,但+'2.3' === +'2.4'
为假。
【参考方案1】:
作为对此的可能扩展,有没有办法将常规 JS 块内联到 CoffeeScript 代码中,这样它就不会被编译?
是的,here's the documentation。您需要将 JavaScript 代码包装在反引号 (`
) 中。这是您在 CoffeeScript 中直接使用 JavaScript 的 ==
的唯一方法。例如:
if `a == b`
console.log "#a equals #b!"
编译好的 JavaScript
if (a == b)
console.log("" + a + " equals " + b + "!");
== null
/undefined
/void 0
的具体情况由后缀存在运算符?
服务:
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 中是不是遗漏了 `do...while` 循环...?
在 JavaScript/CoffeeScript 中确定一个数组是不是包含另一个数组的内容