Esses dois operadores são frequentemente usados e sempre estão confusos e gravados. . .
a () && b (): se o true for retornado após a execução de a (), então b () é executado e o valor de b é retornado; Se False for retornado após a execução de A (), toda a expressão retorna o valor de A () e B () não é executado;
a () || b (): se o true for retornado após a execução de A (), toda a expressão retorna o valor de A () e B () não é executado; Se False for retornado após a execução de A (), B () é executado e o valor de B () é retornado;
&& prioridade é maior que ||
O código é o seguinte
alerta ((1 && 3 || 0) && 4); // Resultado 4 ①
alerta (1 && 3 || 0 && 4); // Resultado 3 ②
alerta (0 && 3 || 1 && 4); // Resultado 4 ③
analisar
Declaração ①: 1 && 3 retornar 3 => 3 || 0 retornar 3 => 3 && 4 retornar 4
Declaração ②: primeiro execute 1 && 3 e retorne 3, depois execute 0 && 4 e retorne 0, e finalmente execute os resultados comparação 3 || 0 e retorne 3
Declaração ③: primeiro execute 0 && 3 e retorne 0, depois execute 1 && 4 e retorne 4 e, finalmente, execute a comparação de resultados 0 || 4 e retorne 4
NOTA: Os números inteiros que não são zero são verdadeiros, strings indefinidos, nulos e vazios são falsos.