4

lsEstimatorが 2 つの要素を持つ配列の場合、この関数は次を返しtrueます。

function got_estimators() {
  var retval = 
   (typeof lsEstimator != 'undefined' &&
    lsEstimator != null &&
   lsEstimator.length > 0);
  return retval;
}

しかし、この関数はそうではありません ( undefinedChrome と FF では を返すと思います):

function got_estimators() {
   return 
      (typeof lsEstimator != 'undefined' &&
      lsEstimator != null &&
      lsEstimator.length > 0);
}

なんで?

4

1 に答える 1

17

return2 番目の例の後に改行があるためです。コードは次のように評価されます。

function got_estimators() {
   return; // <-- bare return statement always results in `undefined`.
   (typeof lsEstimator != 'undefined' &&
    lsEstimator != null &&
    lsEstimator.length > 0);
}

JavaScript は論理演算子を評価していません。

なぜこれが起こるのですか?JavaScript には自動セミコロン挿入機能があるため、つまり「意味のある場所」にセミコロンを挿入しようとします (詳細はこちら)。

returnキーワードと戻り値を同じ行に入れます。

return (typeof lsEstimator != 'undefined' &&
  lsEstimator != null &&
  lsEstimator.length > 0);
于 2013-03-12T12:49:38.213 に答える