-
자바스크립트의 기본 연산자Let's Code/JavaScript 2021. 3. 6. 19:34
모던자바스크립트 2.7 ~ 2.9 (ko.javascript.info/first-steps)
형 변환
형 변환(Type Conversion): 적절한 자료형으로 자동으로 변환하는 과정
- alert 메서드는 자동으로 전달받은 값을 문자형(string)으로 변환
- 수학 연산자 (+, -, *, /)는 자동으로 값을 숫자형으로 변환하여 계산: 이 때 null은 0, boolean은 0 혹은 1, 숫자 이외의 값이 포함된 string 혹은 undefined의 경우 NaN으로 변환
- 논리 연산은 자동으로 값을 불린형으로 변환하여 연산을 수행: 0/빈 문자열/null/undefined/NaN 외엔 모두 true ("0"도 true)
기본 산술 연산자
- 피연산자(operand): 연산이 수행되는 대상, 인수(argument)라고도 불림
- 단항/이항 연산자 (unary operator/binary operator): 피연산자가 하나인 연산자는 다항, 둘인 연산자는 이항
- 나머지 연산자 (Remainder operator) %: a % b는 a를 b로 나눈 후 나머지를 반환
- 거듭제곱 연산자 (exponentiation operator) **: a ** b는 a를 b번 곱한 값을 반환, 1/2 등 분수를 사용하면 제곱근 도출 가능
자바스크립트의 연산자
- 이항 덧셈 연산자 + 는 문자열을 연산할 경우 덧셈이 아니라 문자열 병합을 수행, 이 때 한 피연산자만 문자열일 경우 나머지 연산자를 자동 문자열로 변환
alert(2 + 2 + '1');
답은 41이며, 연산은 왼쪽부터 순차적으로 진행되기 때문
- 뺄셈, 나눗셈 연산자는 반대로 문자열을 숫자로 변환한 후 산술 연산 진행
- 단항 덧셈 연산자는 문자열을 숫자로 변환 (Number 함수와 동일한 역할)
let apples = "2"; let oranges = "3"; alert (apples + oranges); alert ( +apples + +oranges);
답은 각각 "23"과 5
할당 연산자 (Assignment)
- 할당 연산자 = 는 변수에 값을 저장하고, 이를 반환하는 할당 연산자로서 기능
- 복합 할당 연산자인 +=, *=, -= 을 사용하면 저장된 값에 숫자를 연산해 재할당 (modify-and-assign)할 수 있다.
let n = 2; n += 5; n *= 2; alert ( n ); // 14
증가/감소 연산자 (Increment/decrement)
- 증가 연산자(increment) ++는 변수를 1 증가시킨다.
- 감소 연산자(decrement) --는 변수를 1 감소시킨다.
- 증가/감소 연산자는 변수에만 쓸 수 있다. (5++는 불가)
- counter++처럼 피연산자 뒤에 올 때는 후위형 (postfix form), ++counter처럼 앞에 올 때는 전위형 (prefix form)이라고 한다.
- 반환 시 전위형은 증가/감소 후 새로운 값을 반환하지만, 후위형은 이전 값을 반환한다. 즉, 연산을 수행하며 반환값 = result를 즉각적으로 볼 수 있는 것은 전위형, 연산만 수행하는 것은 후위형.
- 이 때, c = ++a 식으로 증가 연산자의 값을 별도 변수로 반환할 경우에도, 연산이 수행되어 c뿐만 아니라 변수 a의 값도 1 증가한다.
let counter = 0; counter++; ++counter; alert ( counter ); // 2 let counter = 3 alert (++counter); // 4 alert (counter++); // 3
연산자 우선순위 (Operator precedence)
- 같은 연산자의 경우 단항 연산자는 이항 연산자보다 우선순위
- 이항 연산자 중 우선순위는 ** > * > / > + > - 순
- 할당 연산자의 우선순위는 다른 연산자 대비 낮으므로, 보통 연산이 끝난 후 값을 할당
- 증가/감소 연산자는 타 연산자보다 우선순위가 높으므로, 피연산자로 사용될 수 있다. (그러나 한 줄에 한 액션만 수행하는 것이 가독성 좋은 코드이므로 권장되지는 않는다.)
비트 연산자 (Bitwise Operator)
- 비트 연산자는 피연산자를 32비트 정수로 변환하여 이진 연산을 수행한다.
- 저수준에서 숫자를 다룰 때 쓰이며, 웹개발에서는 거의 쓰이지 않는다.
쉼표 연산자 (Comma operator)
- 쉼표 연산자는 여러 표현식을 한 줄에서 평가할 수 있게 하며, 할당 연산자보다 우선순위가 낮으므로 마지막 값만 반환한다.
let a = (1 + 2, 3 + 4); alert ( a ); // 7
- 아래 경우처럼 여러 동작을 처리하고 싶지만, 마지막 표현식만 남기고 싶을 때 사용한다.
for (a = 2, b = 3, c = a * b; a < 10; a++) { ... }
비교 연산자 (Comparisons)
- >, <, >=, <=, ==, != 등이 있다.
- 불린형으로 값을 반환하며, 반환 후 변수에 할당할 수 있다.
- 문자의 경우 사전 순으로 (lexicographical) 문자열을 비교하므로, 알파벳 뒤쪽의 문자열이 앞쪽보다 크다고 판단된다.
- 제일 앞 글자부터 한 글자씩 평가하며, 문자가 일치할 경우 길이가 긴 문자열이 더 크다고 판단한다.
- 대문자보다 소문자가 더 크다. (유니코드 순이기 때문)
- 비교하려는 값의 자료형이 다를 경우 숫자형으로 변환하여 비교한다. (아래와 같은 특이한 상황이 발생하기도 한다.)
let a = 0; alert( Boolean(a) ); // false let b = "0"; alert( Boolean(b) ); // true alert (a == b); // true
- 일반 동등 연산자 (equality operator) == 가 아닌 일치 연산자(strict equality operator) ===을 사용하면 자료형의 동등 여부까지 검사하여 위와 같은 경우를 막을 수 있다.
- 동등 연산자는 피연산자가 undefined이나 null 일 때 형 변환을 하지 않기 때문에 서로를 비교하는 것이 아닌 이상 무조건 false를 반환한다.
- 반면 산술 연산자나 기타 비교 연산자에서는 null을 0, undefined를 NaN으로 변환한다.
'Let's Code > JavaScript' 카테고리의 다른 글
자바스크립트: 함수 선언, 표현, 콜백 (0) 2021.03.09 자바스크립트: If, While, For, Switch (2) 2021.03.06 자바스크립트 모달 팝업 띄우기 (0) 2021.02.28 자바스크립트 자료형과 Typeof (0) 2021.02.28 자바스크립트 변수 선언까지 (0) 2021.02.14 댓글