1. || (lógico ou),
Literalmente, o False é devolvido apenas quando antes e depois do falso, caso contrário, o verdadeiro é devolvido.
alerta (true || false); // Truealert (falso || true); // Truealert (true || true); // Truealert (false || false); // false
Este tolo sabe disso ~~
No entanto, em um sentido mais profundo, há outro mundo. Experimente o seguinte código
Alerta (0 || 1); // 1
Obviamente, sabemos que o primeiro 0 significa falso, e o segundo 1 significa verdadeiro, então o resultado acima deve ser verdadeiro e o fato de retornar o resultado é 1. Veja o seguinte código:
Alerta (2 || 1); // 2
Sabemos que os 2 primeiros são verdadeiros e o último 1 é verdadeiro. Então, qual é o resultado de retorno? O resultado do teste é 2, continue lendo:
alerta ('a' || 1); // 'a'Da mesma forma, o primeiro 'A' é verdadeiro, e o próximo 1 é verdadeiro; O resultado do teste é 'a' e o seguinte
alerta ('' || 1); // 1Do exposto, sabemos que a frente "é falsa, a parte traseira 1 é verdadeira e o resultado de retorno é 1. Veja o seguinte
alerta ('a' || 0); // 'a'O primeiro 'a' é verdadeiro e o próximo 0 é falso, o resultado de retorno é 'a', continue para o seguinte
alerta ('' || 0); // 0O anterior "é falso, e o próximo 0 também é falso, e o resultado de retorno é 0
alerta (0 || ''); // ''
O primeiro 0 é falso, o próximo "é falso, o resultado de retorno é"
Isso significa
1. Enquanto "||" é falso na frente de "||", não importa se "||" é verdadeiro ou falso na parte de trás de "||", o valor após "||" será devolvido.
2. Enquanto "||" é verdade, independentemente de "||" é verdadeiro ou falso, o valor antes "||" será devolvido.
Eu chamo isso de princípio de curto -circuito: se você souber o resultado do primeiro, saberá a saída posteriormente. Se o primeiro for verdadeiro, pegue o valor do primeiro e se o primeiro for falso, pegue o valor do segundo.
6 bolas que JS devem lembrar: Lembre -se: nas operações lógicas de JS, 0, "", nula, falsa, indefinida e NAN será julgada como falsa, e os outros são verdadeiros (parece que não há omissão, confirme). Você deve se lembrar disso, caso contrário, haverá problemas com o aplicativo || e &&.
A propósito: muitas vezes pergunto por que não escrevo se (att) diretamente se (att);
De fato, essa é uma maneira mais rigorosa de escrever:
Teste a diferença entre o tipo de 5 e o tipo de !! 5. A função de !! é converter uma variável de outros tipos em um tipo bool.
2. && (logística e)
Literalmente, o verdadeiro será devolvido apenas quando forem e depois forem verdadeiros, caso contrário, False será devolvido.
alerta (true && false); // FalsEalert (true && true); // Truealert (false && false); // FalsEalert (false && true); // false
Então, com base na experiência acima, vejamos a situação em que os números "&&" não são apenas os tipos booleanos.
alert ('' && 1); // ''O nó é retorno "," && "antes" é falso, e o 1 é verdadeiro depois dele.
alert ('' && 0); // ''O nó é retorno "," && "antes" é falso e o 0 também é falso.
alert ('a' && 1); // 1O nó retorna 1, "&&" antes "A é verdadeiro, e o seguinte é 1 também é verdadeiro.
alert ('a' && 0); // 0O nó retorna 0, "&&" antes "A é verdadeiro, e o seguinte é 0 é falso.
alert ('a' && ''); // ''O nó é retorno "," && "antes" A é verdadeiro, e "depois" é falso.
alerta (0 && 'a'); // 0
O nó retorna 0, "&&" antes "0 é falso, e o 'a' é verdadeiro.
alerta (0 && ''); // 0
O nó retorna 0, "&&" antes "0 é falso, e o depois" também é falso.
Princípio do curto -circuito
1. Enquanto "&&" for falso, não importa se "&&" é verdadeiro ou falso, o valor antes "&&" será retornado;
2. Enquanto "&&" for verdadeiro, não importa se "&&" é verdadeiro ou falso, o resultado retornará o valor após "&&";
3. Aplicação no desenvolvimento
Os três códigos a seguir são equivalentes:
a = a || "defaultValue"; if (! a) {a = "defaultValue"; } if (a == null || a == "" || a == indefinido) {a = "defaultValue"; }Qual você quer usar?
2. Como var yahoo = yahoo || {}; é muito amplamente utilizado. Não é a maneira de obter o valor inicial elegante? do que se. . . . mais ... muito melhor, melhor do que? : É muito melhor.
3. Retorno de chamada e retorno de chamada ()
Nos retornos de chamada, isso geralmente é escrito dessa maneira e é mais rigoroso. Primeiro, determine se o retorno de chamada existe. Se existir, execute -o. O objetivo de escrever dessa maneira é impedir que os erros sejam relatados.
Se você escrever retorno de chamada () diretamente; O código relatará um erro quando o retorno de chamada não existir.
4. Exemplos abrangentes
Os requisitos são mostrados na figura:
Escreva uma descrição da imagem aqui
Suponha que a taxa de crescimento seja especificada da seguinte maneira:
1 seta é exibida quando a taxa de crescimento é de 5;
2 setas são exibidas quando a taxa de crescimento é de 10;
3 setas são exibidas quando a taxa de crescimento é de 12;
4 setas são exibidas quando a taxa de crescimento é de 15;
Todos os outros exibem 0 setas.
Como implementá -lo com o código?
Um pouco se, senão:
var add_level = 0; if (add_step == 5) {add_level = 1; } else if (add_step == 10) {add_level = 2; } else if (add_step == 12) {add_level = 3; } else if (add_step == 15) {add_level = 4; } else {add_level = 0; }Um interruptor um pouco melhor:
var add_level = 0; switch (add_step) {case 5: add_level = 1; quebrar; Caso 10: add_level = 2; quebrar; Caso 12: add_level = 3; quebrar; Caso 15: add_level = 4; quebrar; padrão: add_level = 0; quebrar;}Se o requisito for alterado para:
A taxa de crescimento é> 12 e 4 setas são exibidas;
3 setas são exibidas quando a taxa de crescimento é> 10;
A velocidade de crescimento é> 5 e 2 setas são exibidas;
Velocidade de crescimento> 0 mostra 1 seta;
A velocidade de crescimento é <= 0 e 0 setas são exibidas.
Em seguida, será muito problemático implementar com o Switch.
Então você já pensou em implementá -lo em uma linha?
Ok, vamos dar uma olhada na poderosa expressividade do JS:
var add_level = (add_step == 5 && 1) || (add_step == 10 && 2) || (add_step == 12 && 3) || (add_step == 15 && 4) || 0;
Mais poderoso e melhor:
var add_level = {'5': 1, '10 ': 2, '12': 3, '15 ': 4} [add_step] || 0;O segundo requisito:
var add_level = (add_step> 12 && 4) || (add_step> 10 && 3) || (add_step> 5 && 2) || (add_step> 0 && 1) || 0;
O acima é uma análise abrangente do "&&" e "||" Operadores do JavaScript apresentados a você pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!