Eu sei que no php 5.3 em vez de usar esta sintaxe de operador ternário redundante:
startingNum = startingNum ? startingNum : 1
... podemos usar uma sintaxe abreviada para nossos operadores ternários, quando aplicável:
startingNum = startingNum ?: 1
E eu sei sobre o operador ternário em javascript:
startingNum = startingNum ? startingNum : 1
... mas existe uma abreviação?
javascript
ternary-operator
Web designer
fonte
fonte
||
vez de??
?||
operador JS não retorna verdadeiro ou falso, ele retorna o primeiro valor 'verdadeiro'. Digamos que você temval0
eval1
comoundefined
, eval2
é2
,val3
é3
.val0 || val1 || val2 || val3
retornará2
, pois é o primeiro valor 'verdadeiro'.||
retornará o primeiro valor verdadeiro que encontrar e, portanto, pode ser usado como um operador de coalescência, semelhante ao do C #??
fonte
Sim existe:
Em geral,
expr1 || expr2
funciona da seguinte forma (conforme mencionado pela documentação ):fonte
if a is truthy
vs.if a is evaluated to true
?Nesse caso, você pode usar o operador OR.
fonte
Se você tem uma condição com nulo, como
você pode usar '&&'
fonte
anything && null
avaliado como nulo a menos queanything
seja falso?As respostas acima estão corretas. Em JavaScript, a seguinte declaração:
pode ser expresso como
Outro cenário não coberto aqui é se você deseja que o valor retorne falso quando não houver correspondência. A abreviação de JavaScript para isso é:
Mas pode ser expresso como
Só queria cobrir outro cenário, caso outros estivessem procurando uma resposta mais generalizada.
fonte
x = innerWidth * 0.0375 > 24 ? innerWidth * 0.0375 : 24
???innerWidth * 0.0375 > 24
difere daif true
parte que éinnerWidth * 0.0375
. A abreviação só pode ser usada seexpression to be evaluated
eif true
forem os mesmos valores. Mesmo porque você não seria capaz de taquigrafarx = someBoolean ? 'Heck yea!' : 'No way!'
.Math.max(innerWidth * 0.0375, 24)
Math.max
funciona melhor do que um operador ternário em seu caso de uso.startingNum = startingNum ? otherNum : 1
pode ser expresso comostartingNum = otherNum || 1
" está errado. acabei de testar issoPara fazer um ternário como:
em javascript, você pode fazer:
Exemplo:
fonte
x = innerWidth * 0.0375 > 24 ? innerWidth * 0.0375 : 24
se tornaria(innerWidth * 0.0375 > 24 && innerWidth * 0.0375) || 24
?? Existe um atalho, para que eu não tenha que repetirinnerWidth * 0.0375
, a não ser atribuí-lo a uma variável ??Math.max( innerWidth * 0.0375 , 24 )
funcionaria com elegância. Para um caso mais geral, seria bom criar um método descritivo chamado, por exemplo, 'somethingifiedInnerWidth', que melhora a legibilidade, em vez de criar uma variável. Embora em alguns casos seja mais legível ter uma variável (com aquele nome descritivo), no futuro a pergunta 'por que ela é multiplicada por isso?' não é gerado.Math.max
. solução super elegante !!