js中++和()优先级的问题

讨论 未结 7 123
Elylon
Elylon VIP3 2019-9-10
悬赏:20飞吻
var x = 10,y = 5;
y -= ++x - (x % 3) - x;
求y=?
查阅网上的资料, https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
括号的优先级高于 ++x,那么表达式就应该是: y -= 11 - (10 % 3) - 11, y = 6。但结果却是 y -= 11 - (11 % 3) - 11, y = 7。
不应该是先算口号里面的吗?这就有点搞不懂了[思考]
回帖
  • y -= ++x - (x % 3) - x;
    先++x , x=11,
    (x%3)求余 => (11%3)==2
    等式简化 y -= - (2) => y=y-(-2) => y=5+2=7
    0 回复
  • @一个神奇的土豆 括号优先级最高,不应该是先算括号里面的吗?如果按你这种算,是不是就以为 ++x和()优先级是同一级?
    0 回复
  • maplemei
    2019-9-10
    从左往右算, 你可以理解 ++x = (x = x + 1)

    也就是

    var x = 10,y = 5;
    y -= (x = x + 1) - (x % 3) - x;
    0 回复
  • @maplemei 那计算的时候是先算 ++x 还是先算()里面的。这两个算的顺序不一样,结果就不一样
    0 回复
  • maplemei
    2019-9-10
    @Elylon 从左往右算, 先算 ++x 呀
    0 回复
  • maplemei
    2019-9-10
    @Elylon ++x = (x = x + 1) 都是括号 优先级一样
    0 回复
  • @maplemei
    优先级高的不是先运算吗?++x不是比括号的优先级低吗?,按你的理解,++x和括号优先级就是同级的哦,然后从左往右依次计算。但是网上查出来的++x优先级都是比括号低的。这样的话应该先计算括号里面的吧。
    0 回复