연산자의 종류가 굉장히 많은데 그중 대표적인 몇개만 나열하자면
산술 / 할당 / 논리 / 비교 / 삼항조건 / 쉼표 / 그룹 / 지수 / 옵셔널체이닝 / 널병합 / 비트 / 나머지 등이 있다
n = 1 + 5;
와 같은 이항 / 단항 ( ++,--)let {id} = user;
와 같은 할당 예시는 구조분해 할당이다s+'bc'
처럼 문자열에 +를 사용할경우 형변환이 필요하다면 형변환 되며 연산 위치에 따라 문자열이 합쳐진다n > 5
와 같은 부등호를 이용한 연산자나 typeof / instanceof / isArray 도 이에 속한다s ==='a'
와 같은 ===
,!==
등의 논리를 비교하는 연산자가 많이 쓰인다true
일까? 정답은 false
이다( )
)을 통해서도 연산과정을 나눌 수 있다q= ( p = x = 1, y = 2, z = 3)
의 결과값은 어떻게 될까? `x:1,y:2,z:3,p:1,q:3)( )
가 씌워져 있는 부분은 독립적으로 실행된다 생각해야 한다.q=
부분의 할당이 ( )
괄호가 계산된 값이 들어오는 것이다( )
괄호 안의 계산은 ,
단위로 끊어서 앞에부터 확인하자면 p = x = 1
부터 살펴봐야한다p
가 들어가기전 x=1
부터 실행후 x=1
을 통해 1
이란 값을 얻었으니 그 1
을 p
에 할당한다.y=2
와 z=3
을 할당한다,
순서대로 모두 할당했으니 아까 x=1
이란 마지막 할당값이 붙은 것처럼 ( )
안의 연산은 마지막 할당인 z=3
에서의 3
을 가져오게 된다q
는 3
이란 값을 가지게 되는 것**
을 사용해도 되고 Math.pow()
를 사용해도 된다2**3 === Math.pow(2,3)
?
,??
: 널병합(Nullish) 연산자가 존재하는데 해당 연산자는 ECMA 2020 부터 사용할 수 있게 되었는데 ??
앞의 식이 undefined
와 null
일 경우 falsy
로 처리되게 해준다var arr
이란 변수에 arr.length
는 당연히 undefined
일 것이다 그럼 만약 arr
이 어떤 값인지 모르고 배열이 올때 length
를 부를 수 있도록 하려면 어떻게 해야할까?arr?.length
를 사용하면 된다. ?
연산자를 통해 arr
안에 length
라는 프로퍼티가 있는지 확인하고 ?
연산 특성을 확인하여 undefined
나 null
이면 무시하게 된다??
또한 동일하게 사용하면 된다. arr = arr ?? []
처럼 넣게 되면 arr
이 truety
한 값이라면 그대로 arr
이 들어오겠지만 undefined
나 null
이라면 뒤에 들어온 []
이 할당될 것이다산술 연산자엔 +, -, *, /, %, 부호, ++, -- 등이 있는데
console.log(1 + true) // 2
console.log(1 + null) // 1
console.log(1 + undefined) // NaN
JS의 형변환으로 인해 nall과 false 같은 falsy한 값들은 0으로 형변환 되고 true와 같은 truety한 값들은 1로 형변환 된다.
다만 undefined
는 NaN을 반환하게 되니 조심하자
이는 문자를 숫자로 형변환 하려 할때도 NaN을 반환하게 된다+"s"
++와 --같은 증감 연산자를 사용할 때도 조심해야 하는 부분이 있다
let x = 1;
console.log(++x) // 2
console.log(x++) // 2
console.log(x) // 3
연산자가 붙은 위치에 따라 먼저 실행되고 연산되는지 연산되고 실행되는지 각각 다르기 때문에 이런 되도록이면
x += 1
이나 x = x+1
과 같이 직관적으로 바로 알 수 있게끔 사용하는 것이 가독성에도 훨씬 좋다
그리고 가능한 Math 함수를 사용하는 것이 좋고, 괄호를 이용하여 연산식끼리 구분이 될 수 있도록 해주는 것이 훨씬 클린코드스럽다
조건(3항) 연산자는 조건 ? (true) : (false)
로 조건을 ?
앞에 입력하고 :
을 기준으로 각각 true
일때의 값 false
일때의 값을 넣는다면 좋다
값식문을 잘 따져서 식이 들어가야한다면 if문을 활용하는 것이 좋고 각각 값이 들어가야 한다면 3항을 사용하는 것이 좀 더 깔끔해 보이는 것 같다.
const x = 5;
console.log(x > 1 ? 'Plural' : 'Singular'); // Plural
void연산자는 평가/실행 후 undefined를 반환하게 해주는 연산자이다
예전엔 html에서 a태그의 href
속성에 자주 사용했다고 한다
let a = 1,b = 2
let d = void(c = a + b);
console.log(a,b,c,d) // 1, 2, 3, undefined
이렇 듯 아까 사용했떤 ,
연산을 통해 let
선언문 하나에 a
와 b
변수선언을 한꺼번에 하였고 void연산자를 이용해 c를 넣었다
void연산자는 ()안을 평가 실행한 후 undefined
를 반환한다고 했으니 ( )
괄호 안의 c = a+b
는 평가 실행이 되었기에 c
라는 변수가 생겨난 것이고 반환은 undefined
가 된 것이니 d
라는 변수엔 undfined
가 할당된것이다
truthy 와 falsy한 값들이 있는데 실제 if문이나 삼항연산자등 논리 연산자를 사용할 때 사용하면 좀 더 깔끔하게 할 수 있다
falsy한 값들을 알아놓고 나머지는 웬만하면 truthy한 값에 들어온다고 생각하면 좋다.
어떠한 값이 있다는 것 자체가 truthy하게 보기 때문이다
undefined
, null
, false
, 0
, NaN
, ""
...다만 조심할 건 truty 값을 볼때
let a = [], b = " ", c = 'false', d = '0'
...과 같은 falsy처럼 보이지만 truty한 값인 것들이 있으니 조심하자
비트 연산자는 간단하게 개념만 배우고 가면 좋을 것 같다
AND(&), OR(|), XOR(^), NOT(~)
let a = 0b1010, b = 0b1100;
console.log(a & b, a | b, a ^ b, ~b) // '1000', '1110', '110', '-1101'
우리가 현재 일상에서 사용하는 숫자는 10진수들로 이루어져 있지만 컴퓨터는 모든 언어를 2진수로 이해한다.
그렇기에 항상 정확하게만 움직이는 것은 아니기에 몇가지를 알아두어야 한다
false
다round
는 반올림이기에 음수에선 결과값이 다르다. trunc는 아예 소수점 이하를 절삭하는 것false
다. 부동소수점 개념을 이해하고 보면 10진수의 소수점들을 2진수로 표현하려고 하면 무한 소수가 생기는 부분이 있는데 무한하다 보니 어느정도 절삭해서 보여줄 뿐 실제론 그만큼의 차이가 존재한다