반응형

 

핵심 정리

7장 연산자

 

- 연산자는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만듭니다.

이때 연산의 대상을 피연산자라 합니다.

- 피연산자는 값으로 평가될 수 있는 표현식이어야 합니다.

- 연산자는 값으로 평가된 피연사자를 연산해 새로운 값을 만듭니다.

 

산술 연산자

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

이항 산술 연산자(+, -, *, /, %) : 모든 이항 산술 연산자는 피연산자의 값을 변경하는 부수 효과가 없습니다.

단항 산술 연산자(++, --, +, -) : 증가/감소(++, --) 연산자는 피연산자의 값을 변경하는 부수 효과가 있습니다.

+단항 연산자는 피연산자에 어떠한 효과도 없습니다. 숫자 타입이 아닌 피연자에게 + 단항 연산자를 사용하면 피연자를 숫자 타입으로 반환하여 반환합니다.

null은 0으로 타입 변환합니다.

1 + null; // 1

1 + undefined; // NaN

 

할당 연산자

  • 할당 연산자는 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당합니다.
  • 할당문은 표현식인 문입니다.
var x;
x = 10; // 할당문

// 할당문은 표현식인 문
console.log(x = 10); // 10

 

비교 연산자

비교 연산자는 좌항과 우항의 피연산자를 비교한 다음 그 결과를 불리언 앖으로 반환합니다. 

동등 비교(==) 연산자는 좌항과 우항의 피연산자를 비교할 때 먼저 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교합니다.

5 == 5  // true
5 == '5'// true

이처럼 동등 비교(==) 연산자는 예측하기 어려운 결과를 만들어냅니다. 따라서 동등 비교 연산자는 사용하지 않는 편이 좋습니다.

대신 일치 비교(===) 연산자를 사용합니다.

5 === 5 // true
5 === '5' // false


NaN은 자신과 일치하지 않는 유일한 값입니다.

NaN == NaN; // false


삼항 조건 연산자

물음표 앞의 첫번째 피연산자는 조건식, 즉 블리언 타입의 값으로 평가될 표현식입니다. 만약 조건식의 평가 결과가 불리언 값이 아니면 불리언 값으로 암묵적 타입 변환됩니다.

var result = x % 2 ? '홀수' : '짝수';


삼항 조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문입니다.

 

논리 연산자

논리 연산자(||, &&, !)는 우항과 좌항의 피연산자를 논리 연산합니다.

피연산자가 반드시 불리언 값일 필요는 없습니다. 만약 피연산자가 불리언 값이 아니면 불리언 타입으로 암묵적 타입 변환됩니다.

true || true; // true
true || false; // true
false || false; // false

true && true // true
true && false; // false
false && false; // false

!0; // true
!'Hello'; // false


쉼표 연산자

쉽표 연산자는 왼쪽 피연자부터 차례대로 피연산자를 평가하고 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가 결과를 반환합니다.

var x, y, z;
x =1, y =1, z= 3; // 3

 

typeof 연산자

typeof 연산자는 피연산자의 데이터 타입을 문자열로 반환합니다. typeof 연산자는 7가지 문자열 "string", "number", "boolean", "undefined", "symbol", "object", "function" 중 하나를 반환합니다. null 을 반환하는 경우는 없습니다.

typeof null; // "object"

null 값을 연산해 보아도 "null"이 아닌 "object"를 반환합니다. 

이것은 자바스크립트의 첫 번째 버전의 버그입니다. 하위 호환성 문제로 기존 코드에 영향을 줄 수 있기 때문에 아직까지 수정되지 못하고 있습니다.

따라서 값이 null 타입인지 확인할 때는 typeof 연산자를 사용하지 말고 일치 연산자(===)를 사용하여야 합니다.

 

또 하나 주의해야 할 것은 선언하지 않는 식별자를 typeof 연산자로 연산하면 ReferenceError가 아닌 undefined를 반환합니다.

 

지수 연산자

ES7에서 도입된 지수 연산자는 좌항의 피연자를 밑으로, 우항의 피연산자를 지수로 거듭 제곱하여 숫자 값을 반환합니다.

지수 연산자는 이항 연산자 중에서 우선순위가 가장 높습니다.

2 ** 2 // 4
2 ** 0 // 1
2 ** 10 // 1024

 

연산자의 부수 효과

부수 효과가 있는 연산자는 할당 연산자, 증가/감소 연산자, delete 연산자 입니다.

var x;

x = 1; // 할당 연산자는 변수 값이 변하는 부수 효과 발생

x++; // 증가/감소 연산자는 피연산자의 값을 변경하는 부수 효과 발생

var = { a:1};
delete o.a; // delete 연산자는 객체의 프로퍼티를 삭제하는 부수 효과 발생

 

완벽 공략

프로그래밍 하위 호환성

 

프로그래밍에서 하위 호환성(Backward Compatibility)이란, 새로운 버전의 소프트웨어나 시스템이 이전 버전에서 개발된 소프트웨어, 데이터 또는 인터페이스와 여전히 호환되는 능력을 의미합니다. 즉, 하위 호환성이 있는 시스템에서는 새로운 버전으로 업그레이드해도 기존에 사용하던 프로그램이나 데이터가 문제없이 작동합니다.

프로그래밍 세계에서는 기존에 사용하던 프로그램에서도 문제가 없이 작동하게 하기 위해서 처음 규정한 규약들을 수정 못하는 경우도 많이 발생합니다. 위에서 typeof 연산자의 null 값이 "object"가 나오듯이 JavaScript에서 nullundefined는 다르지만 유사한 두 가지 값이라서 이 둘은 종종 혼란을 일으키고 버그의 원인이 되지만 두 값을 합치거나 하나를 없애는 것을 못하는 것과 같이 하위 호환성을 위해서 지금까지 남아 있는 산유물들이 프로그래밍 세계에서는 많이 존재합니다.

728x90
반응형

+ Recent posts