使用条件和||之间的区别在js

时间:2017-10-04 11:52:22

标签: javascript reactjs if-statement ecmascript-6

当某些内容未定义时,有以下两种方法给出默认值。

我一直想知道这之间的区别是什么:

return {
   name: user.name || 'Raul'
}

和此:

return {
   name: user.name ? user.name : 'Raul'
}

我应该使用另一种,或者我应该注意的副作用吗?

2 个答案:

答案 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);

因此,如果吸气剂有副作用(如上所述),那就很重要了。 (吸气剂不应该有副作用。)

同样,如果userProxy,则其各种陷阱可能会被调用两次。

可能值得注意的是,在这两种情况下,如果user.name"",您将获得"Raul" ...

答案 1 :(得分:0)

在你的情况下,他们会以同样的方式工作,因为你可以简单地以第一种方式链接条件

name: user.name || someEmptyVal || 'Raul'

虽然您必须在第二种情况下嵌套条件

name: user.name ? user.name : someEmptyVal ? someEmptyVal : 'Raul'