Waarom geeft typescript && een tekenreekswaarde terug in plaats van een boolean
Waarom retourneert deze code een URI-tekenreekswaarde in plaats van een boolean?
public getContext(): string | undefined {
return this.workspace && this.workspace.uri;
}
Dit is het voorbeeld https://stackblitz.com/edit/typescript-f75jhs
Antwoord #1
Het gebeurt omdat de operatoren && en || kortgesloten zijn (je kunt hier meer over lezen)
Wat betekent dat voor je code hierboven?
Laat me proberen het uit te leggen in een reeks van bewerkingen die worden uitgevoerd:
Evalueer de uitdrukking links van de booleaanse operator
&&, namelijkthis.workspace;Als
this.workspacewaarachtig is, blijf dan evalueren;Evalueer de expressie rechts van de booleaanse operator
&&, namelijkthis.workspace.uri;Als
this.workspace.uriwaarachtig is, dan is de hele uitdrukking waarachtig en kunnen we teruggeven wat aan de rechterkant van de operator stond (in jouw gevalthis.workspace.uri;
Maar als de uitdrukking aan de linkerkant falsey is en je hier de booleaanse AND gebruikt, heeft het geen zin om de andere uitdrukkingen aan de rechterkant te evalueren, omdat de hele AND-uitdrukking toch FALSE zal zijn. Daarom kunnen we een "short circuit" toepassen.