web-dev-qa-db-fra.com

Opérateur ternaire avec déclarations de retour JavaScript

Je dois retourner vrai ou faux si une option dans un menu déroulant est sélectionnée. 

Ceci est mon code:

var active = sort.attr('selected') ? return true : return false;

J'obtiens une erreur indiquant que la première return est inattendue.

Pourquoi?

44
JDillon522

Vous ne pouvez pas affecter une instruction return à une variable. Si vous souhaitez que active se voit attribuer la valeur true ou false, supprimez simplement returns:

var active = sort.attr('selected') ? true : false;

ou peut-être mieux:

var active = sort.prop('selected');

puisque .prop renvoie toujours true ou false, quel que soit l'attribut de balise initial.

43
user2625787

Vous pouvez revenir d'un opérateur ternaire en javascript comme ceci:

return sort.attr('selected') ? true : false;
103
George K

pourquoi pas juste ça?

 return sort.attr('selected');
8
nightograph

De la docs:

Syntaxe
condition ? expr1 : expr2
Paramètres
condition (ou conditions) Une expression qui a la valeur true ou false.
expr1, expr2
Expressions avec des valeurs de tout type.

Faites attention au Expressions with values of any type., Le return xxx n'est pas une expression.

De wikipedia:

Une expression est une construction syntaxique, elle doit être bien formée: les opérateurs autorisés doivent avoir le nombre correct d'entrées aux bons endroits, les caractères qui composent ces entrées doivent être valides, avoir un ordre clair d'opérations, etc. des symboles qui violent les règles de la syntaxe ne sont pas bien formés et ne sont pas des expressions mathématiques valides.

Donc, dans votre cas, vous pouvez utiliser:

return sort.attr('selected') ? true : false
1
aircraft

Juste un commentaire sur votre code:

> sort.attr('selected')

semble utiliser la méthode jQuery attr , qui utilisait pour essayer de deviner ce que vous vouliez et renvoyer l'attribut ou la propriété. Je pense que dans les versions récentes, il retourne toujours l'attribut.

Quoi qu'il en soit, la présence de l'attribut sélectionné signifie uniquement que l'élément (un élément d'option?) Est l'option sélectionnée default, cela ne signifie pas qu'il s'agit de actuellement sélectionné. option. Pour cela, vous devez utiliser la méthode property (jQuery prop sélectionnée). Et puisque la propriété selected est un booléen:

> sort.attr('selected') ? true : return false;

peut simplement être:

 sort.prop('selected');

ou sans jQuery:

 optionElement.selected;
1
RobG