当某些内容未定义时,有以下两种方法给出默认值。
我一直想知道这之间的区别是什么:
return {
name: user.name || 'Raul'
}
和此:
return {
name: user.name ? user.name : 'Raul'
}
我应该使用另一种,或者我应该注意的副作用吗?
答案 0 :(得分:4)
在js
中使用条件和||
之间的区别
假设 name
是一个简单属性,那么在这种特殊情况下,没有一个属性。无论哪种方式,你都会得到相同的结果。没有充分理由使用其中一种,只是你自己的风格偏好,而且没有任何副作用。
但如果name
是带有 getter 的属性,则会有所不同:在||
情况下,getter只会被调用一次。在? :
的情况下,它可以被调用两次(例如,如果它返回一个真值):
var user = {
get name() {
console.log("getter called");
return "Ramón";
}
};
var name;
console.log("Using ||");
name = user.name || "Raul";
console.log(name);
console.log("Using ? :");
name = user.name ? user.name : "Raul";
console.log(name);
因此,如果吸气剂有副作用(如上所述),那就很重要了。 (吸气剂不应该有副作用。)
同样,如果user
是Proxy,则其各种陷阱可能会被调用两次。
可能值得注意的是,在这两种情况下,如果user.name
为""
,您将获得"Raul"
...
答案 1 :(得分:0)
在你的情况下,他们会以同样的方式工作,因为你可以简单地以第一种方式链接条件
name: user.name || someEmptyVal || 'Raul'
虽然您必须在第二种情况下嵌套条件
name: user.name ? user.name : someEmptyVal ? someEmptyVal : 'Raul'