조건에 따라 코드 블록을 실행(조건문) 하거나 반복 실행(반복문) 할 때 사용
0개 이상의 문을 중괄호로 묶은 것 - 코드 블록 OR 블록
주어진 조건식의 평가 결과에 따라 코드 블록의 실행을 결정
주어진 조건식의 평가 결과가 참 OR 거짓이냐에 따라 실행할 코드 블록 결정
주어진 표현식을 평가하여 그 값과 일치하는 표현식을 가지는 case문으로 실행 흐름을 옮김, 일치하는 게 없다면 default로
break를 사용해주어야 fall through가 발생하지 않음조건식의 평가 결과가 거짓일 때까지 코드 블록을 실행하는 과정을 반복
forEach for...in for...of로 대체 가능for (변수 선언문 또는 할당문; 조건식; 증감식) {
조건식이 참인 경우 반복 실행될 문;
}
주어진 조건식의 평가 결과가 참이면 코드 블록을 계속해서 반복 실행
코드 블록을 먼저 실행하고 조건식 평가
레이블 문, 반복문(for for...in for...of while do...while), switch 문의 코드 블록 탈출
식별자가 붙은 문
case 문과 default 문도 여기에 해당foo: {
console.log(1);
break foo;
console.log(2);
}
console.log("DONE!");
// 1
// DONE!
반복문의 코드 블록 실행을 현 지점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동
개발자의 의도와 상관없이 표현식을 평가하는 도중 JS엔진에 의해 암묵적으로 타입이 변환되는 것
+가 문자열 연결 연산자일 때 (피연산자 중 하나라도 문자열이 있을 때) 발생
// 심벌 타입
(Symbol()) + ''; // TypeError!
let a = Symbol();
a.toString(); // 'Symbol()'
String(a); // 'Symbol()'
// 객체 타입
({}) + ''; // '[object Object]'
Math + ''; // '[object Math]'
[] + ''; // ''
[10, 20] + ''; // '10,20'
(function(){}) + ''; // 'function(){}'
Array + ''; // 'function Array() { [native code] }'
산술 연산자 / 비교 연산자 / + 단항 연산자 사용 시 발생
'' [] null false , ...true , ...undefined, ...if문/for문 같은 제어문 / 삼항 조건 연산자의 조건식에서 발생
±0 '' null undefined false NaN개발자가 의도적으로 값의 타입을 변환하는 것
① 표준 빌트인 생성자 함수(Number, String, Boolean)를 new 연산자 없이 호출
② 빌트인 메서드
③ 암묵적 타입 변환 이용
① String()
② Object.prototype.toString
③ 문자열 연결 연산자 +
① Number()
② parseInt() parseFloat() (문자열만 가능)
③ + 단항 산술 연산자
④ * 산술 연산자
① Boolean()
② ! 부정 논리 연산자 두 번 사용
| 단축 평가 표현식 | 평가 결과 |
|---|---|
| true || anything | true |
| false || anything | false |
| true && anything | anything |
| false && anything | false |
논리 연산의 결과를 결정하는 피연산자를 타입 변환하지 않고 그대로 반환하는 것
표현식을 평가하는 도중 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것
||) 또는 논리곱(&&) 연산자 표현식의 결과는 2개의 피연산자 중 어느 한쪽으로 평가! 즉, 불리언 값이 아닐 수도 있다객체는 key-value로 구성된 property의 집합
var elem = null;
var value = elem.value; // TypeError: Cannot read property 'value' of null
var value2 = elem && elem.value; // null
undefined가 할당// 단축 평가
function getStringLength(str) {
str = str || '';
return str.length;
}
// ES6
function getStringLength2(str = '') {
return str.length;
}
좌항의 피연산자가 null 또는 undefined인 경우 undefined를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어감
null or undefined여야 함)var elem = null;
var str = '';
// ES11 Optional Chaining
var value = elem?.value; // undefined
var length = str?.length; // 0
// 등장 이전
var value2 = elem && elem.value; // null
var length2 = str && str.length; // ''
좌항의 피연산자가 null 또는 undefined인 경우 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 피연산자를 반환
||은 Falsy 값도 기본값으로 유효할 때 예기치 않은 동작이 발생할 위험이 있음// ES11 Nullish Coalescing
var foo = null ?? 'default string'; // 'default string'
var foo2 = '' ?? 'default string'; // ''
// 등장 이전
var foo3 = '' || 'default string'; // 'default string'