JAVASCRIPT

연산자

걍가영 2020. 7. 29. 18:25

연산자

삼항 연산자 (Ternary Operator)

앞의 표현식이 truty 이면 첫번째 조건이, falsy이면 두번재 조건이 반환

console.log(true ? 1 : 2); // 1
console.log(false ? 1 : 2); // 2

증가/감소 연산자 (Increment/Decrement Operator)

1 단위로 정수의 증가/감소 연산을 할 수 있음

 

  • ++ 혹은 -- 연산자를 앞에 쓰면, 값을 증가 시키고 뒤의 결과값을 반환
  • ++ 혹은 -- 연산자를 뒤에 쓰면, 값을 증가시키기 전의 피연산자를 그대로 반환

 

let num = 10;

num++;
console.log(num)//11

num--;
console.log(num)//9

할당 연산자 (Assignment Operator)

결과값은 왼쪽 피연산자에 실제로 할당된 값이 됨

// = 연산자
let x;
console.log(x=5); // 5
// 할당 연산자 
let x = 5;
console.log(x += 5); // 10

let y = 6;
console.log(x -= 3); // 3

연산자 우선 순위 (Operator Precedence) 

연산자 우선 순위에 따라 어떤 연산자를 먼저 계산할 지 결정
같은 연산자가 아니라면, 괄호를 둘러싸는 것이 좋음 연산자 우선 순위보기.

typeof ('hello' === ('hello'+'world')); // boolean

 

연산자 결합 순서 (Operator Associativity)

듭제곱 연산자, 할당 연산자, 삼항 연산자가 우결합성을 가짐

 

  • == , !==
  • === , !==
  • Object.is

 

추상적 동일성 (Abstract Equality)

== 연산자는 두 피연산자의 타입이 다를 때는 타입을 변환한 후 비교, 주로 null check 할 때 사용

null == undefined; // true

null == 0; // false
null == ''; // false
undefined == false; // false
undefined == NaN; // false

엄격한 동일성 (Strict Equality)

===, !== 연산자는 두 피연산자의 타입이 다른 경우 무조건 false를 반환

'1' === 1; // false
true === 1; // false

Object.is

Object.is 정적 메소드는 두 인수가 정말로 같은 값인지 검사
하단의 예시 제외하고 ===과 동일

Object.is(NaN, NaN); // true
Object.is(0, -0); // false

 

Spread Syntax

배열 혹은 객체를 다른 배열 혹은 객체에 쉽게 삽입

배열

... 을 이용하여 배열과 배열을 합쳐줌 얕은 복사

const arr1 = [3,4];
const arr2 = [1,2,...arr1,5];

[1, 2].concat(arr1).concat([5]) // [1,2,3,4,5]

객체

자기 자신의 열거 가능한 속성만을 복사

const obj1 = {prop:1};
cosnt obj2 = {...obj1};

Object.assign({}, obj1);

 

분해대입 (Destructuring Assignment)

ES2015에서 배열과 객체 안에 들어있는 값을 쉽게 추출할 수 있는 문법 추가

배열의 분해 대입

// 변수 선언과 동시에 배열의 요소를 변수에 대입
const [a, b, c] = [1, 2, 3];
console.log(a,b,c); // 123

// 이미 선언된 변수에 분해대입
let a, b;
[a, b] = [1, 2];
console.log(a, b); // 1 2

// 배열이 중첩된 것을 분해대입
const [a, b, [c, d]] = [1, 2, [3, 4]];
console.log(a, b, c, d); // 1 2 3 4

객체의 분해대입

// 변수의 선언과 동시에 객체의 속성을 해당 변수에 대입
const {a: prop1, b: prop2} = {a: 1, b:2};
console.log(prop1, prop2) // 1 2

// 좌측 객체 표기에서 속성값 부분 생략하면, 속성 이름이 곧 새 변수의 이름
const {a, b} = {a: 1, b: 2};
console.log(a, b); // 1 2

// 속성의 이름과 같은 이름을 갖는 변수가 좌측에 들어있지 않으면, 해당 속성 무시
// 여기서 `b`는 무시
const {a} = {a: 1, b: 2};
console.log(a); // 1

// 객체가 중첩된걸 분해대입
const {a, b: {c}} = {a: 1, b: {c: 2}};
console.log(a, c); // 1 2

객체의 나머지 속성

분해대입 시 무시된 속성을 가지고 새로운 객체를 만들고 싶다면, ... 붙이기

const {a, b, ...rest} = {a:1, b:2, c:3, d:4};
console.log(reset); // {c:3, d:4}

매개변수에서의 분해대입

function func({prop, array: [item1, item2, item3 = 4]}) {
  console.log(prop);
  console.log(item1);
  console.log(item2);
  console.log(item3);
}

// 1, 2, 3, 4가 차례대로 출력
func({prop: 1, array: [2, 3]});