전위증가/감소 연산자 ++X / --X
: 선 증가/감소 후 할당
후위증가/감소 연산자 X++ / X--
: 선 할당 후 증가/감소
숫자 타입이 아닌 피연산자에 +,-
단항 연산자를 사용하면 숫자타입으로 변환한 값을 반환한다. 피연산자를 변경하는 것은 아니다.
let x = '1';
console.log(+x); //1
console.log(x); //'1'
+
연산자는 피연산자 중 하나 이상이 문자열인 경우 타입 강제 변환이 발생해 문자열 연결 연산자로 동작한다. 그 외에는 산술 연산자로 동작한다.
'1' + 2; //'12'
+undefined; //NaN
할당문도 표현식이다.
==
동등 비교 연산자는 암묵적 타입변환을 통해 타입을 일치 시킨 후 같은 값인지 비교한다.
===
일치 비교 연산자는 피연산자의 값뿐만 아니라 타입까지 비교한다. 단 두가지 예외사항이 있는데 NaN
은 isNaN(NaN)
함수를 이용해 조사할 수 있다. 또한 0
과 -0
을 true
로 반환 한다.
ES6에서 도입된 Object.is 메서드는 정확한 비교 결과를 반환한다.
-0 === + 0; //true
Object.is(-0, +0);
NaN === NaN; //false
Object.is(NaN,NaN); //true
삼항 조건 연산자는 표현식이므로 값처럼 사용할 수 있다. if else문과의 차이점으로 볼 수 있으며 조건이 여러 개라면 if...else문의 가독성이 더 좋다.
조건식? true : false
let result = x % 2 ? '홀수' : '짝수' ;
typeof 연산자는 피연산자의 데이터 타입 7가지 중 하나를 문자열로 반환한다. 하지만 null을 object로 반환하는 등 에러가 발생하므로 null타입은 일치 연산자(===
)를 사용한다.
지수 연산자는 이항 연산자 중에서 우선순위가 가장 높다.
**
Math.pow
연산자 우선순위가 있으므로 그룹 연산자 ()
를 사용하여 우선순위를 명시적으로 조절하는 것이 좋다.
outer:for ( let i = 0; i < 3; i++){
for ( let j = 0; j < 3; j++){
if( i + j ===3 ) break outer;
}
}
개발자가 의도적으로 값의 타입을 명시적으로 변환 하는 것을 타입 캐스팅이라 한다.
문자열 타입으로 변환
String(1) // "1"
(1).toString();; // "1"
1 + ''; // "1"
숫자 타입으로 변환
Number
생성자 함수를 new
연산자 없이 호출Number('0'); // 0
parseInt, parseFloat
함수 사용(문자열만 숫자 타입으로 변환 가능)parseInt('0'); //0
parseFloat('10.53'); //10.53
+
단항 산술 연산자를 이용+'0'; //0
*
산술 연산자를 이용 '0' * 1; //0
불리언 타입으로 변환
Boolean(''); //false
!
부정 논리 연산자를 두 번 사용!!'x' //true
원시 값은 변경 불가능한 값이므로 기존의 원시 값을 직접 변경하는 것이 아니고 기존 원시 값을 사용해 다르타입의 새로운 원시 값을 생성하는 것이다.
자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환 되는 것을 타입 강제 변환이라 한다.
문자열 타입으로 변환 (+
)
1 + '2' // '12'
숫자 타입으로 변환 (-, *, / , > , +
산술연산자, 비교연산자, 단항 연산자
1 - '1' // 0
+'1' // 1
+true // 1
+null // 0
+undefined // NaN
+[] // 0
+{} // NaN
+[10, 20] // NaN
불리언 타입으로 변환
단축 평가
true이면 논리합(||
) 연산자는 첫번째, 논리곱(&&
) 연산자는 두번째 값을 반환한다. 둘다 좌->우로 평가가 진행된다. 이처럼 피연산자를 타입 변환하지 않고 그대로 반환하는 것을 단축 평가라 한다.
if문을 대체 할 수 있다.
옵셔녈 체이닝 연산자 ?.
: 좌항의 피연산자가 null 또는 undefined인 경우 undefined를 반호나하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어간다. 논리 연산자 &&와 달리 false더라도 unll 또는 undefined가 아니면 우항의 프로퍼티 참조를 이어간다.
null 병합 연산자??
[출처]
모던자바스크립트 Deep Dive