Antes de tudo, uma expressão ternária não substitui uma construção if / else - é equivalente a uma construção if / else que retorna um valor. Ou seja, uma cláusula if / else é código, uma expressão ternária é uma expressão , o que significa que ela retorna um valor.
Isso significa várias coisas:
- use expressões ternárias somente quando você tiver uma variável no lado esquerdo da
=
qual será atribuído o valor de retorno
- use apenas expressões ternárias quando o valor retornado for um dos dois valores (ou use expressões aninhadas, se for o caso)
- cada parte da expressão (após? e após:) deve retornar um valor sem efeitos colaterais (a expressão
x = true
retorna true, pois todas as expressões retornam o último valor, mas também altera x sem que x tenha efeito sobre o valor retornado)
Em resumo - o uso "correto" de uma expressão ternária é
var resultofexpression = conditionasboolean ? truepart: falsepart;
Em vez do seu exemplo condition ? x=true : null ;
, onde você usa uma expressão ternária para definir o valor de x
, pode usar o seguinte:
condition && (x = true);
Essa ainda é uma expressão e, portanto, pode não ser aprovada na validação; portanto, uma abordagem ainda melhor seria
void(condition && x = true);
O último passará na validação.
Mas, novamente, se o valor esperado for um booleano, basta usar o resultado da própria expressão de condição
var x = (condition); // var x = (foo == "bar");
ATUALIZAÇÃO
Em relação à sua amostra, isso provavelmente é mais apropriado:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
condition ? x = true : null;
provavelmente deve ser escrito comox = (condition ? true : null);
. Como um aparte, em javascript énull
avaliado como falso, portanto, neste caso, você poderiax = (condition);
e obter o mesmo resultado.