搜尋

首頁  >  問答  >  主體

javascript - 請問三元運算式3<8?(9<6?7:5):2>0?4:1在java和php中的值不一樣,求解為何?


在java和js中的求值結果都為5,而PHP中卻為4
是不是因為我這個式子寫的不太規範?還是其他原因,求解
又讓別人用.net和c語言試了試都是5
【已解決】謝謝各位解答,我猜測的就是式子寫的不太規範,因為我一直覺得三元是從右往左的,所以最後的括號我省略了(以前也常這樣寫),會改正,為了規範,應該是3<8?(9<6?7:5):(2>0 ?4:1)

三叔三叔2758 天前1068

全部回覆(6)我來回復

  • 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

    因此為了避免歧義程式碼的產生,該寫的括號還是不要省略的好

    回覆
    0
  • 过去多啦不再A梦

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

    PHP的三元運算結合順序是反的
    http://www.jianshu.com/p/124f...

    回覆
    0
  • 代言

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

    我猜是php對優先權的解讀跟java、js等語言不一樣,它可能解讀成了 (3 < 8 ? (9 < 6 ? 7 : 5) : 2 > 0) ? 4 : 1

    回覆
    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。

    所以如果不清楚運算子的優先級,就把括號都補全了。 ^_^

    回覆
    0
  • 怪我咯

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

    樓上正解~~~~~~

    回覆
    0
  • 欧阳克

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

    這樣寫真的不該打嗎?

    回覆
    0
  • 取消回覆