在这种情况下,JavaScript如何计算运算符优先级?
我有下面的代码,我只是想了解操作符优先级在这种情况下是如何工作的。只是想回到老学校,看看它在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); 以上内容打印
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
,因为+
不是有效的标识符字符。然后它获取第一个+
,但尝试继续,因为+
和+=
也是有效的。因为它找到了另一个+
,所以它也抓住了它。现在没有其他有效的令牌了,它添加了++
作为令牌并继续运行,在那里它找到了++
。因为在它之后没有=
或+
,所以单个+
成为一个令牌。