티스토리 뷰
이선 브라운의 러닝 자바스크립트 책을 학습하고 기억해둘 만 한 부분을 야생학습하여 정리하였습니다.
제어문
블록 문
엄밀히는 제어문이 아니지만 제어문과 함께 쓰입니다. 문 여러 개를 중괄호로 묶은 것이며 JS는 이들을 하나의 단위로 취급합니다.
{
console.log("statement 1");
console.log("statement 2");
}
블록문은 제어문과 함께 쓸 때 유용하게 사용할 수 있습니다. 제어문 내에서 사용되는 일반적인 개념임에도 불구하고 JS에서는 일부러 파트를 떼어 설명하는 이유는 차후에 클로저나 유효범위를 좀 더 쉽게 설명하기 위함인 듯 합니다.
while 루프
let funds = 50;
while(funds > 1 && funds < 100) {
//돈을 겁니다.
//주사위를 굴립니다.
//그림을 맞췄으면 돈을 가져옵니다.
}
do while 루프
while 루프와의 차이는 시작할 때 조건을 검사하지 않고 마지막에 검사합니다.
do while 루프는 바디를 최소 한 번은 실행하려 할 때 사용합니다.
for 루프
for 루프가 가장 잘 어울리는 경우는 어떤 일을 정해진 숫자만큼 반복하려 할 때, 특히 그 일을 지금 몇 번째 하는지 알아야 할 때.
const hand = [];
for(let roll = 0; roll < 3; roll++){
hand.push(randFace());
}
for in 루프
객체의 프로퍼티에 루프를 실행하도록 설계된 루프입니다.
for(variable in object){
statement
}
if, if else 문
let total = 0;
if (total === 0){
console.log("total is 0");
} else {
console.log("total is not 0");
}
switch 문
expression을 평가한 뒤 그에 일치하는 첫 번째 case를 찾아서 break, return, continue, throw를 만나거나 switch문이 끝날 때 까지 실행합니다.
switch(total){
case 1:
// statement 1
break;
case 2:
// statement 2
break;
default: // default는 필수가 아님.
// statement 3
break;
}
제어문의 예외
break
루프 중간에 빠져나감
continue
루프에서 다음 단계로 건너 뜀
return
제어문을 무시하고 현재 함수를 즉시 빠져나감
throw
예외 핸들러에서 반드시 처리해야 할 예외를 일으킴( 예외 핸들러는 제어문 바깥에 있어도 상관없음)
표현식과 연산자
표현식은 값으로 평가될 수 있는 문입니다. 이를 이용하여 다양한 로직을 짤 수 있습니다.
비교 연산자
일치함(===)과 동등함(==), 대소 관계의 세 가지 타입으로 나뉩니다. 이 때 일치란 두 값이 같은 객체를 가리키거나 같은 타입이고 값도 같다면(원시 타입) 이 값을 일치한다고 합니다. 두 값의 일치 여부를 확인할 때는 === / !== 을 사용합니다. 동등이란 두 값이 같은 객체를 가리키거나 같은 값을 갖도록 변환할 수 있다면 두 값을 동등하다고 합니다. "33"과 33을 동등하다고 보기 때문에, 변환 문제에서 부작용이 생길 수 있어 권장되지 않습니다.
숫자 비교
NaN은 자신을 포함하여 무엇과도 같지 않습니다. NaN인지 확인하기 위해선 내장함수 isNaN을 사용해야 합니다.
자바스크립트의 숫자는 모두 부동소수점 방식이기 때문에 정수를 비교할 때 Number.EPSILON이라는 매우 작은 값을 의미하는 숫자형 상수를 기준으로 삼아 숫자를 구별합니다.
let n = 0;
while(true){
n += 0.1;
if(Math.abs(n - 0.3) < Number.EPSILON) break;
}
console.log(`Stopped at ${n}`);
단축평가
불리언 피연산자를 사용하면 논리 연산자는 항상 불리언을 반환합니다. 피연산자가 불리언이 아니라면, 결고ㅘ를 결정한 값이 반환됩니다.
문자열 병합
+ 연산자는 덧셈과 문자열 병합에 모두 사용됩니다. 피연산자의 타입을 보고 어떤 연산을 할지 결정하는 데 피연산자 중 하나라도 문자열이면 문자열 병합을 수행합니다.
논리 연산자
논리 연산자는 불리언 값만 다룰 수 있으며 불리언에는 false와 true 두 가지 값밖에 없습니다. JS에서는 불리언이 아닌 값을 나름의 규칙으로 불리언 값으로 바꿉니다.
undefined
null
false
0
NaN
''(빈 문자열)
을 제외하고는 모두 참 값은 값입니다.
쉼표 연산자
쉼표 연산자는 표현식을 결합하여 두 표현식을 평가한 수 두 번째 표현식의 결과를 반환합니다. 표현식을 하나 이상 실행해야 하지만 값으로 필요한 것은 마지막 표현식의 결과뿐일 때 쉼표 연산자를 유용하게 쓸 수 있습니다.
let x = 0;, y = 10, z;
z = (x++, y++);
z의 값은 y++가 반환하는 값이 들어갑니다.
typeof 연산자
피연산자의 타입을 나타내는 문자열을 반환합니다. 문제는 typeof 연산자는 typeof null을 "object"라고 판단하는 데 이는 이해가 쉽게 가지 않는 결과지만 이렇게 정해졌기 때문에 숙지하고 넘어가야 합니다. 또한 typeof 연산자는 배열과 배열 아닌 객체 또한 정확히 구분하지 못합니다. ( typeof [] 는 "object"를 반환합니다.)
해체 할당
const obj = { b: 2, c: 3, d: 4};
//해체 할당
const {a, b, c} = obj;
a; //undefined
b; //2
c; //3
d; //ReferenceError
-------------------
const obj = {b: 2, c: 3, d: 4};
let a, b, c;
({a, b, c} = obj);
//괄호를 쓰지 않으면 자바스크립트는 표현식 좌변을 블록으로 해석하기 때문에 괄호를 씁니다.
객체를 해체할 때는 반드시 변수 이름과 객체의 프로퍼티 이름이 일치해야 합니다. a 프로퍼티가 없으므로 undefined를 할당받습니다. 해체 할당에 d라는 프로퍼티가 없으므로 d는 선언조차 되지 않았습니다.
'Running JS 요약' 카테고리의 다른 글
JS - 객체와 객체지향 프로그래밍 (0) | 2021.01.11 |
---|---|
JS - 배열 (0) | 2021.01.06 |
JS - 스코프 (0) | 2021.01.05 |
JS - 함수 (0) | 2021.01.04 |
JS - 리터럴과 변수, 상수, 데이터 타입 (0) | 2020.12.23 |