0
function add(num) { 
  var sum;
  for (var i = 1; i < num + 1; i++){
    sum = (sum || 0) + i;
  }; 
  return sum;     
}
add(9);

for ループで i に和を加算したときの和の定義の振る舞いを説明するキーワードは何ですか? これは三項演算ですか?明らかに、最初にループするときは未定義であるため、javascript は 0 を選択します。それはなぜですか?

4

1 に答える 1

7

「または」演算子||は次のように機能します。

  • 最初のオペランドが「真」の場合、最初のオペランドが返されます。
  • それ以外の場合は、2 番目のオペランドが返されます。

undefinedtrueyではない ため、ループの最初の 1 回目は 0 です。sum || 0

この動作に特定の用語があるかどうかはわかりません。* これは、事前に初期化されていない可能性のある変数を初期化するための便利な方法です。あなたの例では、最初に変数を初期化する方が理にかなっています:

function add(num) { 
  var sum = 0;
  for (var i = 1; i < num + 1; i++){
    sum += i;
  }; 
  return sum;     
}


これは条件付き (三項) 演算子 とは関係がないことに注意してください。

condition ? expr1 : expr2 


* @joews の功績により、この動作には「null 合体」という用語があります

ただし、彼の警告に注意してください。

最初のオペランドが正当に偽である可能性がある場合にこのパターンを使用することは、一般的な論理バグです。var a = b || cたとえば、0が の有効な値である場所は使用しないでくださいb

于 2015-04-12T20:40:26.587 に答える