javascript - Der Wert des ternären arithmetischen Ausdrucks 3<8?(9<6?7:5):2>0?4:1 ist in Java und PHP unterschiedlich. Warum?
三叔
三叔 2017-06-08 11:02:07
0
6
1041


Das Auswertungsergebnis in Java und JS ist 5, aber in PHP ist es 4
Liegt es daran, dass meine Formel nicht standardisiert geschrieben ist? Oder hat es andere Gründe? Ich habe andere gebeten, es mit .net und C-Sprache zu versuchen Ich denke, dass das Ternär von rechts nach links ist, also habe ich die letzte Klammer weggelassen (ich habe es schon oft so geschrieben, ich werde es aus Gründen der Standardisierung korrigieren, es sollte 3<8?(9<6?) sein. 7:5):(2>0?4:1 )

三叔
三叔

Antworte allen(6)
typecho

三元运算符结合方向的问题:
java 从右向左。等效于3<8?(9<6?7:5):(2>0?4:1)
php 从做向右。等效于(3<8?(9<6?7:5):2)>0?4:1

因此为了避免歧义代码的产生,该写的括号还是不要省略的好

过去多啦不再A梦

PHP的三元运算结合顺序是反的
http://www.jianshu.com/p/124f...

代言

我猜是php对优先级的解读跟java、js等语言不一样,它可能解读成了 (3 < 8 ? (9 < 6 ? 7 : 5) : 2 > 0) ? 4 : 1

某草草

在PHP中是这样的:

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

所以是 4;

在JavaScript中是这样的:

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

所以是 5。

所以如果不清楚运算符的优先级,就把括号都补全了。^_^

刘奇

樓上正解~~~~~~

学霸

这样写真的不该打吗?

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage