JavaScript 기본 문법에 이어 , es6 문법에서 새로 추가된 문법에 대해 공부했다. 삼항 연산자나 구조 분해 할당 같은 개념들은 이전에 풀어보던 알고리즘 코드카타에서 종종 보던 것들이라 조금 익숙했다. 화살표 함수는 아직까지는 볼 때마다 조금씩 멍해지는 것 같다. 조금 더 다양한 문제들을 풀어보며 응용 가능할 때까지 완전히 이해할 시간이 필요하다.
1. ES6
// 2015년도 이전 -> var
// (1) ES6 -> let(변수), const(상수)
// (2) arrow function
functionadd() {}
varadd=function () {};
varadd= (x) => {
return1;
};
varadd= (x) =>1;
// (3) 삼항 연산자
// condition ? true인 경우 : false인 경우
console.log(1===1?"참":"거짓")
2. 구조 분해 할당 (destructuring)
// 배열이나, 객체의 속성
// (1) 배열의 경우
let [value1, value2 ] = [1, "new"]
console.log("1", value1) // 1 1
console.log("2", value2) // 2 2
letarr= ["value1", "value2"];
let [a, b, c] =arr;
console.log(a); // value1
console.log(b); // value2
console.log(c); // undefined
letarr2= ["value1", "value2"];
let [d, e, f=3] =arr;
console.log(d); // value1
console.log(e); // value2
console.log(f); // 3
// f = 3이라고 초기값을 설정해주었고, arr2에서 불러올 값이 없었기 때문.
// arr2 = ["value1", "value2", "value3"]가 되면 f는 3이 아니라 value3을 불러온다.
// (2) 객체인 경우
letuser= {
name:"asd",
age:42,
};
// 구조분해할당
let {name, age} = {
name:"asd",
age:42,
};
console.log("name => ", name); // asd (객체가 아닌 string 타입)
console.log("age => ", age); // 42 (객체가 아닌 number 타입)
console.log(myMap.has("two1")); // two1 이라는 key가 없는 상태이기 때문에 false
6. Set
// 고유한 값을 저장하는 자료구조
// 값만 저장한다
// 키를 저장하지는 않는다
// 값이 중복되지 않는 유일한 요소로만 구성된다
// 값 추가, 검색, 값 삭제, 모든 값 제거, 존재 여부 확인
constmySet=newSet();
mySet.add('value1');
mySet.add('value2');
mySet.add('value2');
console.log(mySet.size); // 2 (중복되는 값은 합쳐지기 때문에, value2를 두번 추가하더라도 한번만 카운팅 된다)
// interator
for (constvalueofmySet.values()) {
console.log(value); // value1 value2
}
☆ (문제) 배열 연습하기
문제를 처음 보았을 때, for문이나 strings[n], split 등이 떠올랐다. 근데 알파벳 순으로 어떻게 정리하지? js에도 sql의 order by 같은 함수가 있나? strings를 단어별로 쪼개고, 알파벳으로 또 쪼개고, 순서를 정리한 뒤 합치려고 하니 코드가 너무 복잡하고 길어질 것 같았다.
js 입문 단계이다 보니, 풀이/해설은 대충 생각했던 형태와 비슷했다. 여러번 쪼개는 것을 걱정했던 것과는 달리, strings[i][n] 로 string의 i번째 단어에서 n번째 알파벳을 바로 가져올 수 있다는 게 신기했다. 보통 strings[i] 까지만 쓰다보니, 해당 부분이 처음에 이해가 되지 않아 한참을 봐야 했다. 그리고 가장 어려웠던 알파벳순 정리는 sort로 해결할 수 있었다.