221119 TIL | 자바스크립트 완벽 가이드 - 문

오늘 한 일

  • 자바스크립트 완벽 가이드 ~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

  • 예외가 일어나면 자바스크립트 인터프리터는 프로그램 실행을 멈추가 가장 가까운 예외 핸들러로 점프한다.

출처

자바스크립트 완벽 가이드