Search

4장 연산자

대분류
언어
서적
소분류
JS DeepDive
태그
산술
할당
비교
조건
논리
옵셔널체이닝
최종 편집 일시
2024/10/27 15:41
생성 일시
2024/01/25 00:13
14 more properties

연산자

연산자: 피연산자를 연산하여 새로운 값을 만드는 역할
연산의 대상: 피연산자(값으로 표현될 수 있는 표현식)
연산자 종류 : 산술, 할당, 비교, 논리, 타입 지수 연산

산술 연산자

새로운 숫자 값을 만들며 불가능한경우 NaN을 반환

이항 산술 연산자 ( +, -, *, /, % )

2개의 피연산자 사용. 부수효과 X(피연산자의 값이 바뀌지 않고 언제나 새로운 값을 만듦)
부수효과 : 피연산자의 값(Value)에도 영향을 주는 효과
종류: +, -, *, /, %

단항 산술 연산자 ( ++, -- / +, - )

1개의 피연산자 사용. 부수효과 있는 것도 있고 없는 것도 있음
종류
++, --(이 둘은 부수효과 O --> 피연산자를 증가시키거나 감소시킴), 암묵적 할당
++,-- 안티패턴 --> 뒤에 쓸때와 앞에쓸떄 의미가 다르고, 재할당이 암묵적으로 이루어져서 부수효과가 발생 (변수값이 바뀜)
+, -(이 둘은 어떠한 효과도 없지만 -의 경우 양수를 음수로, 음수를 양수로 반전한 값 반환)
피연산자 변경이 아닌 타입 변경, 혹은 부호를 반전한 값을 생성해 반환
문자열 연결 연산자
// 문자열 연결 연산자 '1' + 2; // -> '12' 1 + '2'; // -> '12' // 산술 연산자 1 + 2; // -> 3 // true는 1로 타입 변환된다. 1 + true; // -> 2 // false는 0으로 타입 변환된다. 1 + false; // -> 1 // null은 0으로 타입 변환된다. 1 + null; // -> 1 // undefined는 숫자로 타입 변환되지 않는다. +undefined; // -> NaN 1 + undefined; // -> NaN // 연산은 앞부분부터 순차적으로 타입 검증을 한다. 1 + undefined + '2' + true; // -> NaN2true 1 + undefined + true + '2'; // -> NaN2 1 + true + '2'; // -> 22 1 + '2' + false; // -> 12false
JavaScript
복사

할당 연산자 ( = )

좌항에 변수 값을 할당하는 연산자 - 부수효과 O
할당문 = 표현식, 할당된 값으로 평가 (여러 변수에 동일한 값을 연쇄할당 가능)

비교 연산자 (==, ===)

동등/일치 비교 연산자 (엄격성 정도의 차이)
동등 비교(==) : 피연산자 비교시 암묵적 타입 반환을 통해 타입을 일치 시킨 후 같은 값인지 비교
일치 비교(===) : 피연산자 비교시 타입도 같고 값도 같은 경우에 한하여 true를 반환 NaN === NaN //false
예외 : NaN - 자신과 일치하지 않는 유일한 값
Object.is 매서드
예측 가능한 정확한 비교 결과를 반환 : Object.is(NaN, NaN) //true
나머지 그 외에는 일치 비교(===) 연산자와 동일하게 동작
대소 관계 비교 연산자
피연산자의 크기를 비교하여 Boolean 값을 반환

삼항 조건 연산자 ( ? : )

첫 번째 피연산자가 true로 평가되면 두 번째 피연산자 반환, false이면 세 번째 피연산자를 반환
삼항 조건 연산자 표현식은 값으로 평가할 수 있는 표현식인 문
조건에 따라 수행해야 할 문이 여러개라면, if ... else를 사용

논리 연산자 ( |, &, ! )

피 연산자를 불리언 타입으로 암묵적으로 변환되어 연산 - 부수효과 X
종류
||(논리합) : 둘 중 1개만 줘
&&(논리곱) : 둘 다 줘봐
!(부정) : 뻥이야

쉼표 연산자 ( , )

변수를 구분시켜주는 연산자 a = 1, b = 2, c = 3;

그룹 연산자 ( () )

() : 연산자 우선순위가 가장 높다.

typeof 연산자 ( typeof() )

선언된 피연산자의 데이터 타입을 문자열로 반환 (string, number, boolean, undefined, symbol, object, function 중 하나 반환.)
null은 반환X → null을 확인하고 싶을 땐 일치연산자(===) 사용
선언하지 않은 식별자를 typeof으로 연산 시, ReferenceError가 발생하지 않고 undefined를 반환.

지수 연산자 ( ** )

**으로 사용
음수 제곱시 (-5) ** 2 = 25 와 같이 괄호로 묶어야 함

옵셔널 체이닝 ( <객체>?.<객체> )

프로퍼티가 없는 객체에 에러 없이 안전하게 접근이 가능
user && user.address && user.address.street
→ user?.address?.street
앞의 평가 대상이 undefined나  null이면 평가를 멈추고  undefined를 반환
읽기나 삭제에는 사용가능하지만, 쓰기에는 사용 불가능
존재하지 않아도 괜찮은 대상에만 사용하는 것이 바람직
사용방식 4가지
1.
obj?.prop : obj가 존재하면 prop 반환, 없으면 undefined 반환
2.
obj?.[prop] : obj가 존재하면 prop 반환, 없으면 undefined 반환
3.
obj?.method() : obj가 존재하면 method()호출, 아니면 undefined 반환
4.
obj.method?.() : obj의 메서드 method가 존재하면 메소드 실행, 아니면 undefined 반환

기타 연산자

연산자
개요
??
null 병합 연산자
delete
프로퍼티 삭제 - 부수효과 O
new
생성자 함수를 호출할 때 사용하여 인스턴스 생성
instanceof
좌변의 객체가 우변의 생성자 함수와 연결된 인스턴스인지 판별
in
프로퍼티 존재 확인