Muitas vezes vejo muitas declarações de expressão condicional abreviada nos códigos de grandes pessoas em todos os lugares. Depois de ler alguns artigos que introduzem esse aspecto, acho que 3 Ways 2 diz se este artigo (http://www.thomasfrank.se/3_ways_2_say_if.html) não é ruim. Neste artigo, o autor resumiu as características e usos das expressões tradicionais de se ... else ... ,?:, &&/|| e as resumiu da seguinte forma:
1. Se ... else estrutura
// Defina r como 0 ou 1 var r = math.floor (2*math.random ()) // Defina a, b e c como "pequeno" se r == 0 um else os defina como "big" // usando três técnicas diferentes // Método 1: se então var a; if (r == 0) {a = "small"} else {a = "big"}; // Método 2: Operador condicional var b = r == 0? "pequeno": "grande"; // Método 3: e/ou operadores var c = r == 0 && "small" || "grande"; // Verifique os valores de nosso alerta de variáveis (r+""+a+"" "+b+" "+c);2. Se ... else se ... else estrutura
// Defina r como 0,1,2 ou 3 var r = Math.floor (4*Math.Random ()) // Define A, B e C para "Nada", "Small", "Big" e "Enormes" // Dependendo do valor ou usando três técnicas diferentes // Método 1: se ... senão ... senão Var a; if (r == 0) {a = "nada"} else if (r == 1) {a = "small"} else if (r == 2) {a = "big"} else {a = "enorme"}; // Método 2: Operadores condicionais var B = r == 0? "NADA": r == 1? "pequeno": r == 2? "Big": "enorme"; // Método 3: e/ou operadores var c = r == 0 && "nada" || r == 1 && "pequeno" || r == 2 && "big" || "enorme"; // Verifique os valores de nosso alerta de variáveis (r+""+a+"" "+b+" "+c);3. Execute a função
// Defina r para 0,1,2 ou 3 var r = math.floor (4*math.random ()) // a variável global x e nossas quatro funções var x = ""; nada = function () {x+= "nada!"}; pequeno = function () {x+= "pequeno!"}; grande = function () {x+= "grande!"}; enorme = function () {x+= "enorme!"}; // Ligue para uma função específica, dependendo do valor de r // usando três técnicas diferentes // Método 1: se .. else ... se ... else ... else if (r == 0) {nada ()} else if (r == 1) {small ()}; // Método 2: operadores condicionais r == 0? nada (): r == 1? pequeno (): r == 2? grande (): enorme (); // Método 3: e/ou operadores r == 0 && (nada () || true) // nada () A função não retorna necessariamente true. Para garantir que a lógica subsequente ou || Os julgamentos não são executados, um valor verdadeiro precisa ser retornado, o mesmo abaixo || r == 1 && (small () || true) || r == 2 && (big () || true) || enorme(); // verifique os valores de nossas variáveis alerta (r+""+x);4. Execute o código
// Defina r para 0,1,2 ou 3 var r = math.floor (4*math.random ()) // a variável global x var x = ""; // executando código diferente, dependendo do valor de r // usando três técnicas diferentes // Método 1: se .. senão se ... else if (r == 0) {x+= "nada!"} Else if (r == 1) {x+= "pequeno!"} Se (r == 2) {x+= "big!"} {} {X x+/ r == 2) {x+= "big!"}} {} {X x+/ r == 2) {x+= "big!"}} {}} // Método 2: operadores condicionais r == 0? function () {x+= "nada!"} (): r == 1? function () {x+= "pequeno!"} (): r == 2? function () {x+= "big!"} (): function () {x+= "enorme!"} (); // Método 3: e/ou operadores r == 0 && (function () {x+= "nada!"} () || true) // Alguém apontou no comentário que as funções anônimas aqui são desnecessárias, e esse é o caso quando houver apenas um código executável, mas se houver um código múltiplo a ser executado, o anônimo do anônimo r == 1 && (function () {x+= "small!"} () || true) || r == 2 && (function () {x+= "big!"} () || true) || function () {x+= "enorme!"} (); // verifique os valores de nossas variáveis alerta (r+""+x);Neste artigo on -line, o foco do autor está na falta do Código; portanto, em geral, o autor prefere usar o operador?: E sente que o && e || Os métodos precisam digitar mais algumas letras, o que faz parecer mais pesado. Ao executar funções, é mais conveniente usar o tradicional se ... caso contrário. Em seus comentários, algumas pessoas sugeriram que tornar o código do lado do cliente mais simples e curto é mais eficaz do que melhorar alguma eficiência de corrida imperceptível, o que também está correto em alguns programas. Portanto, pode ser mais importante escolher uma forma mais concisa para processar declarações condicionais de uma perspectiva formal do que a eficiência operacional dessas próprias declarações, sem mencionar que a eficiência operacional variará de UA a UA.
No julgamento de que existem apenas duas condições, usando se ... else ou?: Ambos são bastante diretos, enquanto os métodos de operação de && e || são um pouco complicados. Mas, de fato, desde que você entenda os dois princípios básicos a seguir, todos os problemas serão resolvidos:
Primeiro, ao usar a lógica e && e lógico ou || Operadores, a direção é da esquerda para a direita. O && para quando o primeiro valor é falso (ou valor que pode ser convertido em falso, como nulo/indefinido/0/""/nan, etc.), e para quando o primeiro valor é verdadeiro (ou valor que pode ser convertido em verdadeiro); O valor retornado por toda a condição é o valor da última condição detectada, não necessariamente apenas verdadeira/falsa.
Segundo, a lógica tem maior prioridade que o operador && que o lógico ou o operador.
De acordo com o primeiro princípio, r == 0 e "pequeno" são calculados em ordem da esquerda para a direita. Se r == 0 for verdadeiro, "pequeno" será detectado. "Small" é uma corda não vazia, então C será tomado como "pequeno"; Se r == 0 for falso, a segunda condição "grande" detecção de lógica ou || é iniciado diretamente. Da mesma forma, C deve ser considerado "grande". De acordo com o segundo princípio, não há necessidade de adicionar colchetes durante a operação da variável C no código acima.
Desde que usei o?: &&, || Os operadores podem desempenhar um papel na simplificação do código em um determinado programa, é muito importante no código -fonte da biblioteca, como o jQuery. Em resumo, esse tipo de operador possui dois aplicativos principais: um é atribuir ou retornar valores, e o outro é executar o código (por enquanto, classificá -lo).
Os usos para atribuição estão em toda parte no jQuery ou em outras bibliotecas. Um aplicativo clássico é implementar a função dos valores padrão para interfaces. Podemos escrever facilmente esse código, como:
var myobj = function (opções) {var color = options.color || this.defaults.defaults; Var BackgroundColor = Option.BackgroundColor || this.defaults.backgroundColor;}; myobj.prototype.defaults = {color: "#393939", BackgroundColor: "#222"} var myins = new myObj ({color: "#80ff80"});Se funciona?: Ou && e ||, como eles não têm a função de bloco de código inato de If ... else (envolvido com {} número), eles só podem executar o código de linha única, como:
(xmlHttPrequest.ReadyState == 4 && xmlhttprequest.status == 200)? Alert ("Sucesso!"): Alert ("Falha!");Portanto, se houver vários códigos que precisam ser executados, as funções anônimas devem ser usadas. como:
(xmlHttPrequest.ReadyState == 4 && xmlhttprequest.status == 200)? function () {alert ("Sucesso!"); var a = 100; alerta (a);}: alert ("falha!");Existem muitas abreviações no código -fonte jQuery 1.7.1, como a linha 2643:
// gancho para atributos booleanosBoolHook = {get: function (elem, nome) {// alinhe os atributos booleanos com as propriedades correspondentes // voltam para atribuir presença em que alguns booleanos não são suportados var attNode, propriedade = jQuery.prop (elem, nome); Retornar propriedade === TRUE || typeof propriedade! == "boolean" && (attNode = elem.getAttributenode (nome)) && attNode.nodEvalue! == false? name.tolowerCase (): indefinido; }, set: function () {...}}Parece que precisamos continuar aprendendo e resumindo.
A frase condicional da abreviação de JavaScript acima (recomendada) é todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.