Да, ваши два примера "эквивалентны", оператор &&
выполняет оценку короткого замыкания .
Если первое выражение операнда дает falsey значение (например, null
, undefined
, 0
, NaN
, пустая строка и, конечно, false
), выражение второго операнда будет не , и еслизначение truey , будет выполнен вызов функции.
Но если doSomething
не был объявлен, оба ваших примера завершатся неудачей .
Если на код ссылается идентификатор, который не объявлен и на который есть ссылка, вы получите ReferenceError
исключение, например:
function foo() {
undeclared && undeclared();
}
try {
foo();
} catch (e) {
alert(e); // ReferenceError!
}
Если вы хотите:
- Убедитесь, чтоидентификатор существует, и
- Убедитесь, что он вызываемый
Вы можете:
if (typeof doSomething == 'function') {
doSomething();
}
typeof
Оператор можно безопасно использовать для несуществующих идентификаторов. Кроме того, проверив, что doSomething
является функцией, вы убедитесь, что сможете ее вызвать.