在JavaScript中是否有空值合并(Elvis)运算符或安全导航运算符?

39 浏览
0 Comments

在JavaScript中是否有空值合并(Elvis)运算符或安全导航运算符?

我将通过示例来解释:

Elvis运算符(?: )

“Elvis运算符”是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

admin 更改状态以发布 2023年5月22日
0
0 Comments

我认为以下写法等同于安全导航运算符,只是略微冗长:

var streetName = user && user.address && user.address.street;

streetName 将会是 user.address.street 的值或者是 undefined

如果你想让它默认为其他的值,你可以结合上述 shortcut 或者使用以下方法:

var streetName = (user && user.address && user.address.street) || "Unknown Street";

0
0 Comments

你可以使用逻辑运算符"OR"代替猫王运算符:

例如:displayname = user.name || "匿名"

但是Javascript目前没有其他功能。如果你想要一种替代语法,我建议你看看CoffeeScript。它有一些类似于你想要的缩写。

例如存在运算符

zip = lottery.drawWinner?().address?.zipcode

函数快捷方式

()->  // equivalent to function(){}

性感函数调用

func 'arg1','arg2' // equivalent to func('arg1','arg2')

还有多行注释和类。显然,你必须将这个编译成javascript或插入页面中