我将举例解释:
猫王运算符(?:)
“猫王运算符”是缩写
Java的三元运算符。一个
这很方便的例子是
返回一个“合理的默认值”
如果表达式解析为false或
null。一个简单的例子是这样的
这样的:
def gender = user.male ? "male" : "female" //traditional ternary operator usage
def displayName = user.name ?: "Anonymous" //more compact Elvis operator
安全导航操作员(?.)
使用安全导航操作符
来避免NullPointerException。
通常当你有一个参考
您可能需要验证的对象
在访问前它不是空的
对象的方法或属性。
为了避免这种情况,安全航行
运算符将简单地返回null
而不是抛出异常,比如
所以:
def user = User.find( "admin" ) //this might be null if 'admin' does not exist
def streetName = user?.address?.street //streetName will be null if user or user.address is null - no NPE thrown
这是一个简单的猫王运算符等价:
function elvis(object, path) {
return path ? path.split('.').reduce(function (nestedObject, key) {
return nestedObject && nestedObject[key];
}, object) : object;
}
> var o = { a: { b: 2 }, c: 3 };
> elvis(o)
{ a: { b: 2 }, c: 3 }
> elvis(o, 'a');
{ b: 2 }
> elvis(o, 'a.b');
2
> elvis(o, 'x');
undefined
你可以使用逻辑'OR'操作符来代替Elvis操作符:
例如displayname = user.name || "匿名"。
但Javascript目前还不具备其他功能。如果你想要一种替代语法,我建议你看看CoffeeScript。它有一些类似于你要找的东西的简写。
例如存在操作符
zip = lottery.drawWinner?().address?.zipcode
功能快捷键
()-> // equivalent to function(){}
性感的函数调用
func 'arg1','arg2' // equivalent to func('arg1','arg2')
还有多行注释和类。显然,你必须将此编译为javascript或插入到页面中,作为<script type='text/coffeescript>',但它增加了很多功能:)。使用<script type='text/coffeescript'>实际上只用于开发而不是生产。