연산자의 종류가 굉장히 많은데 그중 대표적인 몇개만 나열하자면
산술 / 할당 / 논리 / 비교 / 삼항조건 / 쉼표 / 그룹 / 지수 / 옵셔널체이닝 / 널병합 / 비트 / 나머지 등이 있다
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진수로 표현하려고 하면 무한 소수가 생기는 부분이 있는데 무한하다 보니 어느정도 절삭해서 보여줄 뿐 실제론 그만큼의 차이가 존재한다