4

这更像是一个“战壕中的经验”问题。

鉴于这段 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
  }
  // ....
}

我正在尝试缩短它;根据MDN应该可以写:

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

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

在更主观的节点上,您会认为不可读吗?

谢谢

4

2 回答 2

4

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

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

于 2013-07-17T14:00:02.237 回答
2

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

我希望看到以下内容:

var bars = (foo && foo.bars) ? foo.bars : [];
于 2013-07-17T14:08:15.853 回答