javascript - La valeur de l'expression arithmétique ternaire 3<8?(9<6?7:5):2>0?4:1 est différente en Java et en PHP. Pourquoi?
三叔
三叔 2017-06-08 11:02:07
0
6
1058


Le résultat de l'évaluation en Java et en js est de 5, mais en PHP il est de 4
Est-ce parce que ma formule n'est pas écrite de manière standardisée ? Ou est-ce pour d'autres raisons ? J'ai demandé à d'autres de l'essayer en utilisant le langage .net et c, les deux sont 5
[Résolu] Merci pour vos réponses. Je suppose que la formule n'est pas écrite de manière standardisée, car je l'ai toujours. Je pense que le ternaire va de droite à gauche, j'ai donc omis la dernière parenthèse (je l'ai souvent écrit de cette façon auparavant, je vais le corriger par souci de standardisation, il devrait être 3<8 ?(9<6 ?). 7:5):(2>0?4:1 )

三叔
三叔

répondre à tous(6)
typecho

Le problème avec la direction de combinaison de l'opérateur ternaire :
java de droite à gauche. Équivalent à 3<8?(9<6?7:5):(2>0?4:1)3<8?(9<6?7:5):(2>0?4:1)
php 从做向右。等效于(3<8?(9<6?7:5):2)>0?4:1php de faire à droite. Équivalent à (3<8?(9<6?7:5):2)>0?4:1

Par conséquent, afin d'éviter la génération de code ambigu, il vaut mieux ne pas omettre les parenthèses qui doivent être écrites

过去多啦不再A梦

L'ordre de combinaison des opérations ternaires de PHP est inversé
http://www.jianshu.com/p/124f...

代言

Je suppose que l'interprétation de la priorité par PHP est différente de celle de Java, js et d'autres langages. Elle peut être interprétée comme (3 < 8 ? (9 < 6 ? 7 : 5) : 2 > 0) ? 4 : 1

.
某草草

En PHP, cela ressemble à ceci :

$a = (3 < 8 ? (9 < 6 ? 7 : 5): 2 > 0)
    ? 4
    : 1;

Il est donc 4 heures ;

En JavaScript, cela ressemble à ceci :

var a = (3 < 8)
    ? (9 < 6 ? 7 : 5)
    : (2 > 0 ? 4 : 1);

Il est donc 5 heures.

Donc si vous ne connaissez pas la préséance de l’opérateur, complétez simplement les parenthèses. ^_^

刘奇

Bonne réponse à l'étage~~~~~~

学霸

Ne devrais-je pas taper cette photo ?

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal