[모던자바스크립트] 8. 연산자
in Devlog on JavaScript
이 글은 번역 및 정리 글입니다. 출처: javascript.info
연산자
용어
- 피연산자: 연산자가 적용되는 것.
5 * 2
에는 두개의 피연산자가 있다.5
와2
- 단항: 피연산자가 하나인 연산. 단항 부정이라고하면 하나의 연산자의 부호를 바꾸는것일 이야기한다.
- 이진: 피연산자가 두개인 연산
문자열 연결, 이진 +
더하기 연산자는 숫자를 더하거나, 문자열을 병합한다.
let s = "my" + "string";
alert(s); // mystring
피연산자중 하나가 문자열이면 다른 피연산자도 문자열로 변환된다.
alert( '1' + 2 ); // "12"
alert( 2 + '1' ); // "21"
하지만 작업은 왼쪽에서부터 진행되기 때문에 문자열을 만나기전에 숫자 계산만 먼저 할 수도 있다.
alert(2 + 2 + '1' ); // "221”이 아니라 "41" 이다.
문자열 연결은 이진 +
의 특수기능이다. 다른 산술 연산자는 숫자로만 작동하며 항상 피연산자를 숫자로 변환한다.
alert( 2 - '1' ); // 1
alert( '6' / '2' ); // 3
숫자 변환, 단항 +
+
가 단항에 적용되면 숫자일 경우는 아무일도, 숫자가 아닌경우에는 숫자로 변환시킨다.
// 숫자면 아무일도
let x = 1;
alert( +x ); // 1
let y = -2;
alert( +y ); // -2
// 숫자가 아니면 숫자로
alert( +true ); // 1
alert( +"" ); // 0
Number()
와 동일한 기능을 수행하지만 더 짧게 쓸 수 있다.
let apples = "2";
let oranges = "3";
// 변환하여 계산하기
alert( +apples + +oranges ); // 5
// 이거랑 같지만 더 짧다
// alert( Number(apples) + Number(oranges) ); // 5
할당 =
할당연산자인 =
은 우선순위가 매우 낮아 다른 계산들이 수행 된 다음에 작동한다.
let x = 2 * 2 + 1;
alert( x ); // 5
할당은 연결도 가능하다.
let a, b, c;
a = b = c = 2 + 2;
alert( a ); // 4
alert( b ); // 4
alert( c ); // 4
이 때 오른쪽에서 왼쪽으로 할당된다.
또한, 할당연산자는 값을 반환한다.
let a = 1;
let b = 2;
let c = 3 - (a = b + 1);
alert( a ); // 3
alert( c ); // 0
신기하지만 읽기 어렵기 때문에 이런코드는 작성하지 않도록하자.
나머지 %
나머지 연산자 %
는 정수 나누기의 나머지이다.
alert( 5 % 2 ); // 1
alert( 8 % 3 ); // 2
alert( 6 % 3 ); // 0
지수 **
alert( 2 ** 2 ); // 4 (2 * 2)
alert( 2 ** 3 ); // 8 (2 * 2 * 2)
alert( 2 ** 4 ); // 16 (2 * 2 * 2 * 2)
증 ++/감 —
let counter = 2;
counter++; // counter = counter + 1
alert( counter ); // 3
let counter = 2;
counter--; // counter = counter - 1
alert( counter ); // 1
증감은 변수에만 적용할 수 있으며 5++
같은경우는 오류가 발생한다.
증감은 접두로도 접미로도 사용될 수 있는데 차이점이 있으니 살펴보자
let counter = 1;
let a = ++counter; // (*)
alert(a); // 2
alert(counter); // 2
let counter = 1;
let a = counter++; // (\*) ++counter 를 counter++ 로 바꿈
alert(a); // 1
alert(counter); // 2
비트 연산자
연산자 목록 :
- AND (
&
) - 또는 (
|
) - XOR (
^
) - NOT (
~
) - 왼쪽 이동 (
<<
) - 오른쪽 이동 (
>>
) - 제로 채우기 오른쪽 시프트 (
>>>
)
일반적으로 비트를 다룰일은 고수준언어에서는 잦지 않기때문에 잘 사용되지 않는다.
제자리에서 수정
+=
*=
/=
-=
등이 있다.
let n = 2;
n += 5; // n = 7 (n = n + 5)
n _= 2; // n = 14 (n = n _ 2)
alert( n ); // 14
우선순위로 인해 대부분의 다른 계산 후에 실행된다.
let n = 2;
n \*= 3 + 5;
alert( n ); // 16 (n \*= 8)
쉼표 ,
쉼표연산자는 특이한 연산자 중에 하나이다. 쉼표로 나누어진 모든게 평가되지만 마지막 결과만 반환된다.
let a = (1 + 2, 3 + 4);
alert( a ); // 7 ( 1+2 는 계산 뒤 삭제되고, 3+4만 계산되어 반환된다.)
숙제
접미사 및 접두사
let a = 1, b = 1;
let c = ++a; // ?
let d = b++; // ?
결과는?
a와 x의 결과는?
let a = 2;
let x = 1 + (a \*= 2);
2023년 새해에는 성장하고 함께하고 싶다면?
Pre A 단계 이상의 스타트업 C 레벨들이 모여서 커뮤니티를 만들었습니다. 같이 스터디하고 친해질 일잘러를 찾습니다.