JavaScript странное поведение с приоритетом оператора !!! 1 - PullRequest
0 голосов
/ 14 ноября 2018

Как вы думаете, что будет результатом этого выражения?

var a = 10;
a = a + (a = 5);
console.log(a);

// a = 10?

НЕТ !!! Это 15!

Теперь давайте посмотрим на другое подобное утверждение:

var a = 10;
    a = (a = 5) + a;
    console.log(a);
    
    // a = 15? 

Опять нет, теперь его 10. Почему это? Я не могу понять. Но подождите, есть еще два:

var a = 10;
a = a + a++;
console.log(a);

// a = 21? Haha no! Its 20!

И последний:

var a = 10;
a = a++ + a;
console.log(a);

// 21))) now my mind is blown away (

Так кто-нибудь может сказать, почему javascript так себя ведет?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Чтобы лучше это понять, давайте рассмотрим другую переменную

CASE 1

var a = 10;
a = a + (a = 5); 
console.log(a); // 15

a = 10;
var b = a + (a = 5);
console.log(a); // 5
console.log(b); // 15
a + (a = 5)
5 + (a = 5) // here a is assigned a value 5 and bracket returns 5
5 + 5 // here value of a is 5
10 // value will be assigned to variable on LHS

СЛУЧАЙ 2

var a = 10;
a = (a = 5) + a;
console.log(a); // 10


a = 10;
var b = (a = 5) + a;
console.log(a); // 5
console.log(b); // 10
(a = 5) + a
(a = 5) + a // here a is assigned a value 5 and bracket returns value 5
5 + 5 // here value of a is 5
10 // value will be assigned to variable on LHS

CASE 3

var a = 10;
a = a + a++;
console.log(a); // 20

a = 10;
var b = a + a++;
console.log(a); // 11
console.log(b); // 20
a + a++ // post increment i.e. it will return the value first and then increment
10 + 10 // where value of a will 10 + 1 i.e. 11 
20 // value will be assigned to variable on LHS

CASE 4

var a = 10;
a = a++ + a;
console.log(a); // 21

a = 10;
var b = a++ + a;
console.log(a); // 11
console.log(b); // 21
a++ + a // post increment i.e. it will return the value first and then increment
10 + a // where value of a will 10 + 1 i.e. 11
10 + 11 // as value of a is 11
21 // value will be assigned to variable on LHS
0 голосов
/ 14 ноября 2018

var a = 10;
a = a + (a = 5);
console.log(a);

// a = 10?

Это 15, потому что значение a было 10, и вы добавили (a = 5) после, что изменило значение a на 5. Поэтому Вы сделали 10 + 5.

var a = 10;
    a = (a = 5) + a;
    console.log(a);
    
    // a = 15? 

Теперь, когда у вас есть (a = 5) , сначала вы меняете его значение на 5 до , добавляя a . Таким образом, вы делаете 5 + 5.

Надеюсь, это поможет.

...