为什么CoffeeScript的字符串插值在表达式前面加上空字符串?

时间:2014-11-04 02:23:06

标签: javascript string coffeescript string-interpolation

在CoffeeScript中,以下语句求值为以空字符串为前缀的JavaScript语句。

我觉得在类型安全方面存在一个边缘情况,但我无法想到这一点。在什么情况下前缀有所不同?

CoffeeScript的:

x = "#{foo} bar"

JavaScript的:

x = "" + foo + " bar";

1 个答案:

答案 0 :(得分:1)

它确保表达式始终被评估为字符串,从而阻止表达式数字加法而不是连接。在字符串仅包含单个插值表达式的情况下,它还有效地将该表达式转换为字符串。几个例子:

x = 2
y = 3

typeof "#{x}" is string   # true since this compiles to "" + x

str2 = "#{x}#{y}" # We want the string "23" here, not the number 5