在阅读Coffeescript文档时,我对scant documentation on existential operators感到困惑。文档说明
它(
?=
)也可以用于比||=
更安全的条件分配 提供,用于处理数字或字符串的情况。
?=
和||=
运算符之间有什么区别?何时应该使用哪一个?
答案 0 :(得分:19)
?
和||
检查完全不同(但重叠)的情况。
||
运算符与JavaScript中的运算方式完全相同,因此就0
而言,''
和||
之类的内容是假的; ||
在JavaScript意义上检查真实性。
?
运算符在JavaScript中转换为== null
,因此当a ? b
为b
或{{1}时,a
仅为null
}}; undefined
检查CoffeeScript意义上的定义。
考虑这些:
?
第一个循环将为您提供五个煎饼和一个for v in [false, 0, '', null, undefined, 6]
do (v) ->
a = v
a ||= 'pancakes'
console.log("#{v} ||= 'pancakes':", a)
for v in [false, 0, '', null, undefined, 6]
do (v) ->
a = v
a ?= 'pancakes'
console.log("#{v} ?= 'pancakes':", a)
,第二个循环将为您提供6
,false
,0
,两个煎饼和一个{ {1}}。
演示:http://jsfiddle.net/ambiguous/PdLDe/1/
因此,如果您只想要JavaScript风格的行为(即''
,6
和0
将被忽略),那么您可能需要false
。如果您只想跳过''
和||=
,则需要null
。