When lsEstimator
is an array with 2 elements, this function returns true
:
function got_estimators() {
var retval =
(typeof lsEstimator != 'undefined' &&
lsEstimator != null &&
lsEstimator.length > 0);
return retval;
}
but this function doesn't (it returns undefined
, I think, in Chrome and FF):
function got_estimators() {
return
(typeof lsEstimator != 'undefined' &&
lsEstimator != null &&
lsEstimator.length > 0);
}
Why?
Because of the line break after return
in the second example. The code is evaluated as:
function got_estimators() {
return; // <-- bare return statement always results in `undefined`.
(typeof lsEstimator != 'undefined' &&
lsEstimator != null &&
lsEstimator.length > 0);
}
JavaScript is not even evaluating the logical operators.
Why does this happen? Because JavaScript has automatic semicolon insertion, i.e. it tries to insert semicolons "where it makes sense" (more information here).
Put the return
keyword and the return value in the same line:
return (typeof lsEstimator != 'undefined' &&
lsEstimator != null &&
lsEstimator.length > 0);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With