在JavaScript中使用if来做null检查是很常见的,但是其中有几个陷阱,空字符串和零都被强制转化为false,这往往会让你犯错。

if (typeof p !== "undefined" && p !== null) {  p.func();}

CoffeeScript存在操作符?只会在变量为null或者undefined的时候会返回真,与Ruby的nil?类似。到了CoffeeScript中,上面的代码直接被简化成:

p?.func()

意思就是变量p定义且被实例化过,则调用"func"方法,否则就不调用。


网络上有说:存在操作符可以替换||操作符,这种观点是不严格的,严格说是错误的

eg:

a = "123"

b = a || 30

alert b

说明:

    当a的值不为空时可以用?替换||,此时alert 为123

    如果a="",此时用?则alert为空(空白)  用|| alert为30

    如果上面的变量a删除  ?对应 alert为30  用||编译报错



如果你在访问属性之前进行null检查,你可以把存在操作符放在它左边来跳过检查。这与Actice Support的try方法比较类似。

blackKnight.getLegs()?.kick()


你能够用同样的方法检查一个属性是否是函数,是否可以调用,把存在操作符放在括号之前就行。如果属性不存在,或者不是一个函数,则就不会被调用。

blackKnight.getLegs().kick?()