在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?()
转载于:https://blog.51cto.com/issac/1564500