使用默认值的逻辑测试结果

时间:2013-07-17 13:56:49

标签: javascript

这更像是“来自战壕的经验”问题。

鉴于这段javascript

/**
 * @param [foo] 
 *         {Object} an optional object (it can be null, undefined, empty, etc..)
 * @param [foo.bars]
 *         {Array} an Array that *might* be in the object
 */
function (foo) {
  // I want to get the array, or an empty array in any 
  // of the odd cases (foo is null, undefined, or foo.bars is not defined)
  var bars = [];
  if (foo && foo.bars) {
     bars = foo.bars
  }
  // ....
}
我试图缩短这一点;根据{{​​3}},可以写下:

function (foo) {
  var bars = (foo && foo.bars) || [];
  // ...
}

我错过了一个不起作用的案例(价值集或其他浏览器)吗?是否有更短/更清洁的方法来做到这一点?

在一个更主观的节点上,你会认为那是不可读的吗?

由于

2 个答案:

答案 0 :(得分:4)

这是一种非常有效的方法,只要您知道foo.bars永远不会被定义为不是数组的真实值(如foo = {bars: 1})

这是不可读的,因为大多数Javascript开发都熟悉&&||的工作方式,并且一直使用它们来分配默认值。

答案 1 :(得分:2)

我根本不喜欢它。对于传统的程序员来说,如果(foo&& foo.bars)的计算结果为true,则读取的结果就好,否则它将是一个空数组。

我希望看到以下内容:

var bars = (foo && foo.bars) ? foo.bars : [];