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) が true と評価された場合、結果の値が true であるかのように読み取られます。それ以外の場合は、空の配列になります。

私は以下を見たいと思います:

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