4

lsEstimator是具有 2 个元素的数组时,此函数返回true

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

但这个函数没有(它返回undefined,我认为,在 Chrome 和 FF 中):

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

为什么?

4

1 回答 1

17

return因为第二个例子中的换行符。代码被评估为:

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 回答