suchen

Heim  >  Fragen und Antworten  >  Hauptteil

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?


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 )

三叔三叔2718 Tage vor1031

Antworte allen(6)Ich werde antworten

  • typecho

    typecho2017-06-08 11:04:07

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

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

    Antwort
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-08 11:04:07

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

    Antwort
    0
  • 代言

    代言2017-06-08 11:04:07

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

    Antwort
    0
  • 某草草

    某草草2017-06-08 11:04:07

    在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。

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

    Antwort
    0
  • 怪我咯

    怪我咯2017-06-08 11:04:07

    樓上正解~~~~~~

    Antwort
    0
  • 欧阳克

    欧阳克2017-06-08 11:04:07

    这样写真的不该打吗?

    Antwort
    0
  • StornierenAntwort