【发布时间】:2011-09-30 15:12:43
【问题描述】:
我会举例说明:
猫王运算符 (?: )
“猫王接线员”是缩写 Java的三元运算符。一 这很方便的例子是 返回一个“合理的默认”值 如果表达式解析为 false 或 空值。一个简单的例子可能看起来像 这个:
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
【问题讨论】:
-
C# 中存在“Elvis 运算符”——但它被称为 null 合并运算符(不那么令人兴奋):-)
-
如果你想要另一种语法,你可以看看 cofeescript
-
这个问题有点混乱......它混合了 3 个不同的运算符? : (三元运算符,在问题中拼写出来,可能是错字),?? (null 合并,在 JavaScript 中确实存在)和 ?. (猫王)在 JavaScript 中不存在。答案并没有很好地阐明这种区别。
-
@JoelFan 您能否提供指向有关 javascript 中正确空合并 (
??) 的文档的链接?到目前为止,我发现的所有内容都表明 JS 只有“虚假”合并(使用||)。 -
好吧,我不是说JS字面上有??但它有零合并......但即使在那里我也有点错。话虽如此,我已经看到很多使用 || 的 JS 代码。尽管存在错误的陷阱,但作为一个无效的合并
标签: javascript jquery groovy safe-navigation-operator