오늘 한 일
- 자바스크립트 완벽 가이드 ~149p까지 학습
- 연산자
- 표현문 : 할당, 함수 호출같은 부수 효과가 있는 표현식
- 선언문 : 변수를 선언하거나 함수를 정의하는 문장
for/of
- for/of 루프는 이터러블 객체에서 동작한다.
- 배열, 문자열, 세트, 맵이 이터러블이다.
- 배열을 동적으로 순회한다.
- 배열에 변화가 발생하면 반복 결과가 바뀐다.
for/of와 객체
-
객체는 기본적으로 이터러블이 아니기 때문에 일반적인 객체에 for/of를 사용할 경우 TypeError가 발생한다.
객체의 프로퍼티를 순회하고 싶다면 for/in 루프를 사용하거나 Object.keys() 메서드에 for/of를 사용한다.
-
객체 프로퍼티의 키와 값이 모두 필요하다면 Object.entries()와 분해 할당을 통해 사용할 수 있다.
let o = { x: 1, y: 2, z: 3 };
let keys = "";
for(let [k, v] of Object.entries(o)) {
pairs += k + v;
}
paris // => "x1y2z3"
for/of와 문자열
let frequency = {};
for(let letter of "mississippi") {
if(frequency[letter]) {
frequency[letter]++;
} else {
frequency[letter] = 1;
}
}
frequency // => {m: 1, i: 4, s: 4, p: 2}
for/of와 세트, 맵
- 세트를 for/of로 순회하면 루프 바디는 세트의 각 요소에 대해 한번씩 실행한다.
- 문자열에서 각 단어를 중복없이 출력할 수 있는 예시이다.
let text = "Na na na na na na na Batman";
let wordSet = new Set(text.split(" "));
let unique = [];
for(let word of wordSet) {
unique.push(word);
}
console.log(unique); // ['Na', 'na', 'Batman']
for/await를 사용한 비동기 순회
- for/of를 변형한 루프이다.
async function printStream(stream) {
for await(let chunk of stream) {
console.log(chunk);
}
}
for/in
- 객체를 대상으로 사용한다.
- for/of와 비슷하지만, for/in은 어떤 객체든 쓸 수 있다.
- for/in문을 실행할 때
- object 표현식을 평가한다.
- 표현식이 null이나 undefined로 평가되면 루프를 건너뛰고 다음 문으로 이동한다.
- 왼쪽 값으로 평가될 수만 있다면 어떤 표현식을 써도 된다.
- 다음 코드처럼 객체 프로퍼티 이름을 배열에 복사할 수 있다.
let o = { x:1, y:2, z:3 }
let a = [], i = 0;
for(a[i++] in o) {}
a // ['x', 'y', 'z']
try/catch/finally
- 예외가 일어나면 자바스크립트 인터프리터는 프로그램 실행을 멈추가 가장 가까운 예외 핸들러로 점프한다.
출처
자바스크립트 완벽 가이드