let [value1, value2] = [1, "new"];
console.log(value1); // 1
console.log(value2); // new
let arr = ["val1", "val2", "val3"];
let [a, b, c, d = "val4"] = arr; // d 는 'val4'로 초기화
console.log(a, b, c, d); // val1 val2 val3 val4
let arr = ["val1", "val2", "val3", "val5"];
let [a, b, c, d = "val4"] = arr; // d 는 'val4'로 초기화
console.log(a, b, c, d); // val1 val2 val3 val5
undefined
가 저장된다.let arr = [1, 2, 3];
let [a, b, c, d] = arr;
console.log(a, b, c, d); // 1 2 3 undefined
let user = { name: "hyewon", age: 15 };
let { name, age } = user;
console.log(name, age); // hyewon 15
let user = { name: "hyewon", age: 15 };
let { name: newName, age: newAge } = user;
console.log(newName, newAge); // hyewon 15
let user = { name: "hyewon", age: 15 };
let { name, age, birthday = "today" } = user; // birthday 는 'today'로 초기화
console.log(name, age, birthday); // hyewon 15 today
let user = { name: "hyewon", age: 15, birthday: "yesterday" };
let { name, age, birthday = "today" } = user;
console.log(name, age, birthday); // hyewon 15 yesterday
const name = "hyewon";
const age = 20;
const obj = {
name: name,
age: age,
};
console.log(obj); // { name: 'hyewon', age: 20 }
const name = "hyewon";
const age = 20;
const obj = {
name,
age,
};
console.log(obj); // { name: 'hyewon', age: 20 }
let arr = [1, 2, 3];
console.log(arr); // [ 1, 2, 3 ]
console.log(...arr); // 1 2 3
let newArr = [...arr, 4];
console.log(newArr); // [1,2,3,4]
let user = { name: "hyewon", age: 21 };
let user2 = { ...user, isMarried: false };
console.log(user2); // { name: 'hyewon', age: 21, isMarried: false }
function exampleFunc(a, b, c, ...args) {
console.log(a, b, c); // 1 2 3
console.log(...args); // 4 5 6
console.log(args); // spread(...)를 빼주면 배열 형태! [ 4, 5, 6 ]
}
exampleFunc(1, 2, 3, 4, 5, 6);
const value = "javascript";
console.log(`hello ${value}!`); // hello javascript!
일급객체(First-class Object)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다.
const sayHello = function() {
console.log('Hello!');
};
sayHello(); // "Hello!" 출력
- 콜백 함수 : 매개 변수로서 쓰이는 함수
- 고차 함수 : 함수를 인자로 받거나 반환하는 함수
(즉, 콜백함수는 고차함수에 포함되는 개념)
function callFunction(func) {
func();
}
const sayHello = function() {
console.log('Hello!');
};
callFunction(sayHello); // "Hello!" 출력
function createAdder(num) {
return function (x) {
return x + num;
};
}
const addFive = createAdder(5);
// const addFive = function (x) { return x + 5; };
console.log(addFive(10)); // 15가 출력된다.
const person1 = {
name: "john",
age: 31,
isMarried: true,
sayHello: function () {
console.log(`Hello My name is ${this.name}`); //this는 자기자신 객체을 가리킨다.
},
};
person1.sayHello(); // Hello my name is john
const person2 = {
name: "john",
age: 31,
isMarried: true,
sayHello: () => {
console.log(`Hello My name is ${this.name}`); //this는 자기자신 객체을 가리킨다.
},
};
person2.sayHello(); // Hello! My name is undefined
this.name
이 undefined
가 나온다!const myArr = [
function (a, b) {
return a + b;
},
function (a, b) {
return a - b;
},
];
// 배열 인덱스 쓰고 괄호로 함수 호출 (매개변수 포함해서)
console.log(myArr[0](1, 3)); // 4
console.log(myArr[1](10, 7)); // 3
- 함수를 일급 객체로 다룰 수 있다는 것은, 함수를 다양하게 조합할 수 있다는 것을 의미한다.
- 새로운 함수를 반환하는 함수를 작성하면, 함수를 조합하여 더 복잡한 기능을 구현할 수 있다.
- 이것을 활용하면 코드를 더욱 간결하게 작성할 수 있으며, 유지 보수도 쉬워진다.
function multiplyBy(num) {
return function (x) {
return x * num;
};
}
function add(x, y) {
return x + y;
}
const multiplyByTwo = multiplyBy(2);
// const multiflyByTwo = function(x) { return x * 2 }
const multiplyByThree = multiplyBy(3);
// const multiflyByThree = function(x) { return x * 3 }
console.log(multiplyByTwo(10)); // 20
console.log(multiplyByThree(10)); // 30
const result = add(multiplyByTwo(5), multiplyByThree(10));
console.log(result); // 40
- JavaScript에서 객체와 배열을 이용하면 다양하고 복잡한 프로그래밍을 할 수 있지만, 여전히 현실세계의 여러가지 문제들을 프로그래밍적으로 반영하기엔 많이 부족하다.
- 이러한 한계를 극복하고자 비교적 최근에 등장한 자료구조가
Map
과Set
이다.- 이 자료구조는 데이터의 구성, 검색, 사용을 객체나 배열보다 효율적으로 처리할 수 있기 때문에 많이 각광받고 있다.
Map
은 키-값 쌍을 저장하는 객체와 비슷하다.Map
은 각 쌍의 키와 값을 저장하며, 객체와 달리 키로 사용할 수 있는 모든 유형을 사용할 수 있다. (키에 어떤 데이터 타입도 다 들어올 수 있다. 객체는 문자열만 가능.)Map
은 키가 정렬된 순서로 저장되기 때문에 추가한 순서대로 반복할 필요가 없다.
new Map()
– 맵을 만든다.map.set(key, value)
–key
를 이용해value
를 저장한다.map.get(key)
–key
에 해당하는 값을 반환한다..key
가 존재하지 않으면undefined
를 반환한다.map.has(key)
–key
가 존재하면true
, 존재하지 않으면false
를 반환한다.map.delete(key)
–key
에 해당하는 값을 삭제한다.map.clear()
– 맵 안의 모든 요소를 제거한다.map.size
– 요소의 개수를 반환한다.
const map1 = new Map();
map1.set('a', 1);
map1.set('b', 2);
map1.set('c', 3);
console.log(map1.get('a'));
// Expected output: 1
map1.set('a', 97);
console.log(map1.get('a'));
// Expected output: 97
console.log(map1.size);
// Expected output: 3
map1.delete('b');
console.log(map1.size);
// Expected output: 2
💡 [for …of 반복문]
for of
반복문은 ES6에 추가된 새로운 컬렉션 전용 반복 구문이다.for of
구문을 사용하기 위해선 컬렉션 객체가[Symbol.iterator]
속성을 가지고 있어야만 한다. (직접 명시 가능)
const myMap = new Map();
myMap.set("one", 1);
myMap.set("two", 2);
myMap.set("three", 3);
console.log(myMap.keys()); // [Map Iterator] { 'one', 'two', 'three' }
for (const key of myMap.keys()) {
console.log(key);
} // one two three
console.log(myMap.values()); // [Map Iterator] { 1, 2, 3 }
for (const value of myMap.values()) {
console.log(value);
} // 1 2 3
console.log(myMap.entries()); // [Map Entries] { [ 'one', 1 ], [ 'two', 2 ], [ 'three', 3 ] }
for (const entry of myMap.entries()) {
console.log(entry);
} // [ 'one', 1 ], [ 'two', 2 ], [ 'three', 3 ]
Map
의 크기를 확인하려면 size
속성을 사용한다.Map
에 존재하는지 여부를 확인하려면 has()
메소드를 사용한다.console.log(myMap.size); // 3
console.log(myMap.has("two")); // true
Set
은 고유한 값을 저장하는 자료 구조Set
은 값만 저장하며, 키를 저장하지 않는다.Set
은 값이 중복되지 않는 유일한 요소로만 구성된다.Set
을 만들려면 Set()
생성자를 사용한다.Set
에 값을 추가하려면 add()
메소드를 사용한다.Set
에서 값을 검색하려면 has()
메소드를 사용한다.const mySet = new Set();
mySet.add('value1');
mySet.add('value2');
console.log(mySet.has('value1')); // true 출력
Set
에서는 values()
메소드를 사용하여 값을 반복할 수 있다.Set
의 크기를 확인하려면 size
속성을 사용한다.Set
에서 검색하여 존재하는지 여부를 확인하려면 has()
메소드를 사용한다.const mySet = new Set();
mySet.add('value1');
mySet.add('value2');
mySet.add('value2');
mySet.add('value3');
console.log(mySet.size); // 3이 출력된다. 중복된 값인 value2는 1개로 카운트.
console.log(mySet.has("value2")); // true 출력
console.log(mySet.has("value4")); // false 출력
for (const value of mySet.values()) {
console.log(value);
} // value1 value2 value3
기존에 알던 내용도 있었고, 모르던 내용도 있었다. 1주차 내용보다는 확실히 어려워진 느낌. 2주차 숙제로 문자열 관련된 알고리즘 문제 하나 풀어봤는데 힌트 참고해서 겨우겨우 풀었다.. 하하😂