在这种情况下,JavaScript如何计算运算符优先级?

在这种情况下,JavaScript如何计算运算符优先级?,javascript,Javascript,我有下面的代码,我只是想了解操作符优先级在这种情况下是如何工作的。只是想回到老学校,看看它在JavaScript中是如何工作的 var num1 = 5, num2 = 10, result = (num1++)+num2; result1 = num1+++num2; result2 = (++num1)+num2; console.log(result); console.log(result1); console.log(result2); 以上内容打印

我有下面的代码,我只是想了解操作符优先级在这种情况下是如何工作的。只是想回到老学校,看看它在JavaScript中是如何工作的

var num1 = 5,
    num2 = 10,
    result = (num1++)+num2;
    result1 = num1+++num2;
    result2 = (++num1)+num2;

console.log(result);
console.log(result1);
console.log(result2);
以上内容打印如下:

15 16 18 15 16 18 分别

  • result1
    不应该抛出语法错误吗
  • 我不知道
    result2
    是如何
    18
  • result1 = (num1++) + num2;
    
    因此,本质上,正在发生的是:

    var num1 = 5,
        num2 = 10,
        result = (num1++) + num2; //5 + 10, then 5->6
        result1 = (num1++) + num2; //6 + 10, then 6->7
        result2 = (++num1) + num2; // 7->8, then 8 + 10
    

    result1 = (num1++) + num2;
    
    因此,本质上,正在发生的是:

    var num1 = 5,
        num2 = 10,
        result = (num1++) + num2; //5 + 10, then 5->6
        result1 = (num1++) + num2; //6 + 10, then 6->7
        result2 = (++num1) + num2; // 7->8, then 8 + 10
    

    我知道这只是一个快速演示,但请注意,您正在使用
    result1
    result2
    创建全局变量。为了避免出现这种情况,我建议使用单行或前导逗号,而不是尾随。至于为什么
    result1
    不是语法错误,操作符周围的空格是可选的,标记器会尽可能多地获取以创建有效的标记。因此它首先创建
    num1
    ,因为
    +
    不是有效的标识符字符。然后它获取第一个
    +
    ,但尝试继续,因为
    +
    +=
    也是有效的。因为它找到了另一个
    +
    ,所以它也抓住了它。现在没有其他有效的令牌了,它添加了
    ++
    作为令牌并继续运行,在那里它找到了
    ++
    。由于后面没有
    =
    +
    ,因此单个
    +
    将成为一个标记。脱离主题,我知道这只是一个快速演示,但请注意,您正在使用
    result1
    result2
    创建全局变量。为了避免出现这种情况,我建议使用单行或前导逗号,而不是尾随。至于为什么
    result1
    不是语法错误,操作符周围的空格是可选的,标记器会尽可能多地获取以创建有效的标记。因此它首先创建
    num1
    ,因为
    +
    不是有效的标识符字符。然后它获取第一个
    +
    ,但尝试继续,因为
    +
    +=
    也是有效的。因为它找到了另一个
    +
    ,所以它也抓住了它。现在没有其他有效的令牌了,它添加了
    ++
    作为令牌并继续运行,在那里它找到了
    ++
    。因为在它之后没有
    =
    +
    ,所以单个
    +
    成为一个令牌。