[모던 자바스크립트 Deep dive] Study - 7장 연산자

n-u·2022년 4월 12일
0
post-thumbnail

7. 연산자

값으로 평가된 피연산자를 연산해 새로운 값을 만든다.
산술, 할당, 비교, 논리, 타입, 지수 등을 수행한다.

  • 피연산자 : 연산의 대상(값으로 평가될 수 있는 표현식이어야 한다.)

7.1 산술 연산자

피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만든다.
산술 연산이 불가한 경우 NaN을 반환한다.

7.1.1 이항 산술 연산자

2개의 피연산자를 산술 연산하여 숫자 값을 만든다.
언제나 새로운 값을 만든다.

이항 산술 연산자의미부수효과
+덧셈x
-뺄셈x
*곱셈x
/나눗셈x
%나머지x

7.1.2 단항 산술 연산자

1개의 피연산자를 산술 연산하여 숫자값을 만든다.

단항 산술 연산자의미부수효과
++증가0
--감소0
+어떠한 효과도 없다. 음수를 양수로 반전하지 않는다.x
-양수를 음수로, 음수를 양수로 반전한 값을 반환한다.x

※ 1. 증감/감소(++/--)연산자

  • 증감/감소(++/--)연산자는 피연산자의 값을 변경하는 부수효과를 가지고 있다.
var x = 1;

//++연산자는 피연산자의 값을 변경하는 암묵적 할당이 이루어진다.
x++;   //x = x +1  -> 1 + 1
console.log(x);  // 2

//--연산자는 피연산자의 값을 변경하는 암묵적 할당이 이루어진다.
x--; //x = x -1; -> 방금 할당된 x의 값 2 - 1 =1;
console.log(x); // 1
  • 위치가 중요하다.
  1. 선할당 후 증가
    전위 증감/감소 연산자 : 피연산자 앞에 증감/감소 연산자가 위치
    : 먼저 피연산자의 값을 증가 /감소 -> 다른 연산을 수행
var x = 5, result;
//선할당 후 증가
result = x++;
console.log(result, x); //5, 6
//변수 선할당 후 증가한 값을 result에 할당되었고, 변수x는 증감되었기 때문에 6이 나온다.

2.선 증감 후 할당
후의 증감/감소 연산자 : 피연산자 뒤에 증감/감소 연산자가 위치
: 먼저 다른 연산을 수행 -> 피연산자의 값을 증가/감소 시킨다.

var x = 5, result;
//선증가 후 할당
result = ++x;
console.log(result, x); //6, 6
//변수 x가 선증가 후 할당되었기 때문에 result값이 6이되고 x값이 증가 되어 x도 6 

2. "+"단항 연산자

  • 숫자 타입이 아닌 피연산자에 + 연산자를 사용하면, 숫자 타입으로 변환하여 반환한다.
var x = '1'; //문자타입

//문자열 -> 숫자 
console.log(+x); //1

//불리언 값 -> 숫자 
x = true;
console.log(+x); //1
console.log(x) // true

x = false;
console.log(+x); //0
console.log(x) // false

//문자열 -> 숫자로 변환 할 수 없는 경우 NaN을 사용
x = 'Hello';
console.log(+x); //NaN
console.log(x) //"Hello"

3. "-"단항 연산자

피연산자의 부호를 반전한 값을 반환한다.
"+"연산자와 마찬가지로 숫자타입이 아닌 피연산자에 사용하면 피연산자를 숫자타입으로 변환하여 반환한다.

//부호를 반전시킨다.
-(-10); //10
//문자열 -> 숫자
-'10'; // -10
//불리언 -> 숫자
-true; //-1
//무자열-> 숫자로 타입을 변환할 수 없음으로 'NaN'을 반환한다.
-'Hello'; //-NaN

7.1.3 문자열 연결 연산자

"+"연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다.

->개발자의 의도와 상관없이 자바스크립트 엔진에 의해 암묵적으로 타입이 변환되는 것을 암묵적 타입 또는 타입 강제 변환 이라고 한다.

//문자열 연결 연산자
'1' + 2; // '12'
1 + '2'; // '12'

//산술연산자
1 + 2; // 3

//true는 1로 타입 변환
1 + true; //2

//false는 0으로 타입 변환
1 + false; //1

// null은 0으로 타입 변환
1 + null; //1

//undefined는 숫자로 타입 변환되지 않는다.
+undefined; //NaN
1 + undefined //NaN


※ 기억해두기

  • ture -> 1
  • false -> 0
  • null -> 0
  • undefined -> 숫자타입으로 변환되지 x
profile
기록하며 발전하는 삶

0개의 댓글