-1

Если у меня есть следующий кодКаков порядок приоритетности модуля в Javascript?

var num = 15 % 2 + 6 * 4; 

, например ... Я хотел бы знать, что выход будет, в частности, я хотел бы знать порядок старшинства для модуля (операция, выполняемая % символ). Будет ли модуль выполняться до или после операций сложения и умножения?

Edit: Я уже смотрел на людей, статьи связывают меня

MDN Operator Precedence

И сделал это, прежде чем задать вопрос, но, к сожалению, он не содержит достаточно информации, чтобы полностью ответить мой вопрос, следовательно, мой вопрос здесь. Просто для того, чтобы спасти людей от лишних усилий.

Update: Глядя в associativity как показания от обсуждения в комментариях под одним предложенным ответом является то, что этот вопрос связан с ассоциативности (если вы простите за случайный каламбур).

Update: (?^_ ^) Синтаксис редактировать

+1

Почему бы вам не попробовать? – elclanrs

+5

Это то, что вам действительно нужно просто [смотреть вверх] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Operator_Precedence), а не отвечать на Stackoverflow. – Quentin

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence показывает, что модуль имеет тот же приоритет, что и команды разделения и умножения, но я хочу знать, что произойдет сначала, умножение или модуль, или, возможно, есть некоторые дополнительные переменные, которые могут возникнуть в первую очередь. –

ответ

3

Технически это remainder operator (более математические умы, чем мой модуль, будут обрабатывать различия в знаках по-разному), и он имеет тот же приоритет и ассоциативность, что и умножение и деление.

Так

var num = 15 % 2 + 6 * 4; 

является

var num = (15 % 2) + (6 * 4); 

MDN имеет a handy article на оператора старшинства и ассоциативности.


Re ваш комментарий на вопрос:

... Я получаю 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

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

Значит, они выполняются в том же порядке, что и компилятор их анализирует? –

+0

@PeterDavidCarter: Нет, они выполняются в порядке, определенном спецификацией языка, что совсем другое. Компилятор проанализирует их в порядке '%', '+' и '*', но они будут выполняться в порядке '%', '*', '+'. Порядок, в котором они * разбираются *, здесь не имеет значения. –

+0

Итак, оператор останова (модуль/'' '%' '') будет выполняться до того, как оператор умножения ('' '' '' ') будет тем, что вы говорите? Я читаю тебя здесь правильно? –

0

Modulo должны иметь такой же приоритет, как деление, умножение и показателей. См. here

+0

Я уже видел, но спасибо :) :). –

+0

Подождите, возможно, я неправильно понял, по-видимому, простой ответ? Являются ли экспоненты актуальными неожиданным образом? –

1

В основном вы, идя слева направо, но вы делаете плюс первый, а затем умножить, затем разделите, а остальная часть разделяется. Так

var num = 15 % 2 + 6 * 4; 

в основном 15% 2 = 1

+0

Но ответ компилятора дает мне 25 не 1. ???? –

+0

Это даст вам 25, но ответ будет первым :) –

+0

Я не код на двоичном уровне, но спасибо! –

Смежные вопросы