Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中模数的优先顺序是什么?_Javascript_Operator Precedence_Modulus - Fatal编程技术网

Javascript中模数的优先顺序是什么?

Javascript中模数的优先顺序是什么?,javascript,operator-precedence,modulus,Javascript,Operator Precedence,Modulus,如果我有以下代码 var num = 15 % 2 + 6 * 4; 例如。。。我想知道输出将是什么,特别是我想知道模的优先顺序(由%符号执行的操作)。模数是在加法和乘法运算之前还是之后执行 编辑:我已经看过了人们链接我的文章 在提问之前,我已经这样做了,但不幸的是,它没有包含足够的信息来完全回答我的问题,因此我在这里提问。只是为了节省人们再次链接的努力 更新:从一个建议答案下面的评论中的讨论中可以看出,这个问题与联想性有关(如果你能原谅这个偶然的双关语的话) 更新:语法编辑(^^?模应具有

如果我有以下代码

var num = 15 % 2 + 6 * 4;
例如。。。我想知道输出将是什么,特别是我想知道模的优先顺序(由
%
符号执行的操作)。模数是在加法和乘法运算之前还是之后执行

编辑:我已经看过了人们链接我的文章

在提问之前,我已经这样做了,但不幸的是,它没有包含足够的信息来完全回答我的问题,因此我在这里提问。只是为了节省人们再次链接的努力

更新:从一个建议答案下面的评论中的讨论中可以看出,这个问题与联想性有关(如果你能原谅这个偶然的双关语的话)


更新:语法编辑(^^?

模应具有与除法、乘法和指数相同的优先级。从技术上看,它是(比我更多的数学头脑认为模数会以不同的方式处理符号差异),并且它与乘法和除法具有相同的优先级和关联性

所以

MDN具有运算符优先级和关联性


请重新谈谈你对这个问题的看法:

…我通过示例代码获得
num
变量值
25
,但是
var num=3*15%2+6*4
还会产生一个
num
变量,
console.log
显示为也带有
25
的值

这是因为
15%2+6*4
3*15%2+6*4
都是
25
。让我们把它分解一下:

您的第一个示例:
15%2+6*4

15 % 2 + 6 * 4
1      + 6 * 4
1      + 24
25
3 * 15 % 2 + 6 * 4
45     % 2 + 6 * 4
1          + 6 * 4
1          + 24
25
您的第二个示例:
3*15%2+6*4

15 % 2 + 6 * 4
1      + 6 * 4
1      + 24
25
3 * 15 % 2 + 6 * 4
45     % 2 + 6 * 4
1          + 6 * 4
1          + 24
25

基本上是从左到右,但你先做加号,然后乘,然后除,剩下的就是除。所以

 var num = 15 % 2 + 6 * 4;

基本上是15%2=1

你为什么不试试呢?这是你真正应该做的事情,而不是在Stackoverflow上回答。显示模与除法和乘法命令具有相同的优先级,但我想知道哪个将首先发生,乘法还是模,或者是否有其他变量控制哪些可能首先发生。关于输出,使用示例代码,我得到
num
变量值
25
,但是
var num=3*15%2+6*4
还会产生一个
num
变量,
console.log
显示该变量也带有值
25
。显然,您所查看的表表明
%
的优先级高于
+
。那么问题出在哪里?它们是按照编译器解析它们的相同顺序执行的?@PeterDavidCarter:不,它们是按照语言规范定义的顺序执行的,这是完全不同的。编译器将按照
%
+
*
的顺序解析这些代码,但它们将按照
%
*
+
的顺序执行。它们被解析的顺序在这里是不相关的。所以余数运算符(模数/
%
)将在乘法运算符(
*
)之前执行,这是您要说的吗?我在这里读对了吗?@PeterDavidCarter:再一次,解析在这里是不相关的;相关的是执行。是的,大多数数学(不是全部)是从左到右关联的,但优先级胜过关联性。我应该指出,这基本上与JavaScript无关;JavaScript只是在基本运算符方面遵循基本算术的约定。这个规则在某些地方被称为PEMDAS,在另一些地方被称为BODMAS。(应该写成PE(MD)(AS)或BO(DM)(AS),因为M和D在这两种情况下具有相同的优先级,A和S也是如此。)@PeterDavidCarter在这个问题的示例中清楚地表明,它并没有真正产生数学上的差异(现在忽略可能的浮点问题);你真正想确定的是什么?你有没有副作用的表情?你真的关心浮点问题吗?它会给你25分,但答案是第一个:)