Это происходит потому, что операторы &&
и ||
замкнуты накоротко (об этом вы можете прочитать здесь )
Что это значит для вашего кода выше?
Позвольте мне попытаться объяснить это в последовательности выполняемых операций:
Оценить выражение слева от логического оператора &&
, то есть this.workspace
;
Если this.workspace
верно, то продолжить оценку;
Оценить выражение справа от логического оператора &&
, который равен this.workspace.uri
;
Если this.workspace.uri
верно, тогда все выражение верно, и мы можем вернуть то, что было справа от оператора (в вашем случае this.workspace.uri
;
Но, если выражение слева является ложным, и вы используете логическое И здесь, нет смысла оценивать другие выражения справа, потому что все выражение И будет ЛОЖЬ в любом случае. Следовательно, мы можем «замкнуть накоротко».