https://www.w3schools.com/js/js_es6.asp
https://developer.mozilla.org/ko/docs/Web/JavaScript
JavaScript | MDN
JavaScript (JS)๋ ๊ฐ๋ฒผ์ด, ์ธํฐํ๋ฆฌํฐ ํน์ just-in-time ์ปดํ์ผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก, ์ผ๊ธ ํจ์๋ฅผ ์ง์ํฉ๋๋ค. ์น ํ์ด์ง๋ฅผ ์ํ ์คํฌ๋ฆฝํธ ์ธ์ด๋ก ์ ์๋ ค์ ธ ์์ง๋ง, Node.js, Apache CouchDB, Adobe Acrobat์ฒ๋ผ
developer.mozilla.org
๐ก ๊ฐ์
ES : "ECMAScript"์ ์ฝ์ด์ด๋ฉฐ, JavaScript์ ํ์ค ์คํ์ ์ ์ํ๋ ๊ท๊ฒฉ์ ๋งํ๋ค.
6 : 2015๋ ์ ๋ฐํ๋ 6๋ฒ์งธ ์ฃผ์ ๋ฒ์ ์ด๋ผ๋ ์๋ฏธ์ด๋ค.
- ES6(ECMAScript 2015)์ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํ ๋ค์ํ ์๋ก์ด ๋ฌธ๋ฒ๊ณผ ๊ธฐ๋ฅ์ ๋์ ํ์์ผ๋ฉฐ, ํ์ฌ ECMAScript ํ์ค์ ์ต์ ๋ฒ์ ์ ๋๋ค.
- JavaScript ES6 ๋ฌธ๋ฒ์ ๋ฐฐ์ฐ๋ ๊ฒ์ React๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์ํ ์ค์ํ ๊ธฐ์ด์ ๋๋ค.
1๏ธโฃ ๋ธ๋ก ์ค์ฝํ ๋ณ์ let๊ณผ const
ES6์์ ์ถ๊ฐ๋ `let`๊ณผ `const`๋ ๋ธ๋ก ์ค์ฝํ ๋ณ์๋ฅผ ์ ์ธํ ๋ ์ฌ์ฉํ๋ฉฐ, ๋ธ๋ก(`{}`) ๋ด์์๋ง ์ ํจํฉ๋๋ค.
โ๏ธ`let` : ๋ณ์๋ฅผ ์ ์ธํ ๋ ์ฌ์ฉํ๋ฉฐ, ์ค๋ณต ์ ์ธ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
// let ๋ณ์๋ ๊ฐ์ ๋ธ๋ก ๋ด์์ ์ค๋ณต์ด ๋ถ๊ฐ๋ฅํ๋ค.โจ
let y = 1;
// let y = 100; // ์๋ฌ: 'y'๋ ์ด๋ฏธ ์ ์ธ๋ ๋ณ์์ด๋ฏ๋ก ์ฌ์ ์ธํ ์ ์์ต๋๋ค.
// let ๋ณ์์ ์ ํจ ๋ฒ์๋ {} ๋ธ๋ก์ด๋ค.โจ
let z = 10;
if (true) {
let z = 100; // ๋ธ๋ก ๋ด์์ ์๋ก์ด z ๋ณ์๋ฅผ ์ ์ธ
console.log(z); // 100 (๋ธ๋ก ๋ด์ z ๊ฐ์ ์ถ๋ ฅ)
}
console.log(z); // 10 (๋ธ๋ก ์ธ๋ถ์ z ๊ฐ์ ์ถ๋ ฅ)
โ๏ธ`const` : ์์๋ฅผ ์ ์ธํ ๋ ์ฌ์ฉํ๋ฉฐ, ๊ฐ ์ฌํ ๋น์ด ๋ถ๊ฐ๋ฅํ์ง๋ง ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๋ด๋ถ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
const GENDER = "๋จ์";
// var GENDER = "์ฌ์"; // ์๋ฌ: 'GENDER'๋ ์ด๋ฏธ ์ ์ธ๋ ์์์ด๋ฏ๋ก ์ฌ์ ์ธํ ์ ์์ต๋๋ค.
// GENDER = "์ฌ์"; // ์๋ฌ: ์์์ ์ฌํ ๋น์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.โจ
const arr = ["ํ๊ธธ๋", "์ด์์ ", "ํ๊ธธ์"];
// arr = ["๊น์ฒ ์"]; // ์๋ฌ: 'arr'๋ ์์์ด๋ฏ๋ก ์ฌํ ๋นํ ์ ์์ต๋๋ค.
arr[0] = "๊น์ฒ ์"; // ํ์ฉ: ๋ฐฐ์ด์ ๋ด๋ถ ์์๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.โจ
arr.push("๋ฐ์ํฌ"); // ํ์ฉ: ๋ฐฐ์ด์ ์์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๊ฐ๋ฅํฉ๋๋ค.
console.log(arr); // ["๊น์ฒ ์", "์ด์์ ", "ํ๊ธธ์", "๋ฐ์ํฌ"]
// ๊ฐ์ฒด์์์ ์์
const P1 = {"name" : "ํ๊ธธ๋"};
// P1 = {"name" : "์ด์์ "}; // ์๋ฌ: ์์ 'P1'์ ์ฌํ ๋น์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
P1.name = "์ด์์ "; // ํ์ฉ: ๊ฐ์ฒด์ ๋ด๋ถ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
P1.age = 20; // ํ์ฉ: ๊ฐ์ฒด์ ์๋ก์ด ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
console.log(P1); // { name: '์ด์์ ', age: 20 }
2๏ธโฃ ํ์ดํ ํจ์ (Arrow Function)
ํ์ดํ ํจ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ต๋ช ํจ์๋ฅผ ๋์ฒดํ๋ฉฐ, ๊ฐ๋ ์ฑ์ด ํฅ์๋ฉ๋๋ค.
โ๏ธ๋ณ์์ ํ ๋น๋ ํ์ดํ ํจ์๋ ํธ์ด์คํ ๋์ง ์์ต๋๋ค. ์ฆ, ํ์ดํ ํจ์๋ ์ ์ธ๋ ์์น๋ณด๋ค ์์์ ์ฐธ์กฐํ ์ ์์ต๋๋ค. ์ด๋ ๋ณ์์ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง๊ธฐ ์ ์๋ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
/* ๊ธฐ์กด ์ต๋ช
ํจ์ */
a(); // ํธ์ถ ๊ฐ๋ฅ: var๋ก ์ ์ธ๋ a๋ ํธ์ด์คํ
๋๋ฏ๋ก ํธ์ถ ๊ฐ๋ฅ
var a = function() {
console.log('a ์คํ'); // 'a ์คํ'์ ์ถ๋ ฅํ๋ ํจ์
}
/* ํ์ดํ ํจ์โจ */
// b(); // ํธ์ถ ๋ถ๊ฐ: let์ผ๋ก ์ ์ธ๋ b๋ ํธ์ด์คํ
๋์ง ์์์ ํธ์ถํ ์ ์์
let b = () => {
console.log('b ์คํ'); // 'b ์คํ'์ ์ถ๋ ฅํ๋ ํ์ดํ ํจ์
}
b(); // ํธ์ถ ๊ฐ๋ฅ: ์ ์ธ ์ดํ์ ํธ์ถํ๋ฉด ์ ์์ ์ผ๋ก ์คํ๋จ
โ๏ธ๋ฌธ๋ฒ1 : ์ฝ๋๊ฐ ํ ์ค์ผ ๊ฒฝ์ฐ `{}`๋ฅผ ์๋ตํ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก `undefined`๋ฅผ ๋ฐํํ๊ณ , `{}` ์์ด ์์ฑํ๋ฉด ํด๋น ๊ฐ์ด ์๋์ผ๋ก ๋ฐํ๋ฉ๋๋ค.
let a1 = (a) => console.log(a); // ์ถ๋ ฅ ํจ์โจ
console.log(a1(1)); // 1์ ์ถ๋ ฅํ ํ, undefined๋ฅผ ๋ฐํ
let a2 = (a, b) => a + b; // ๋ ์๋ฅผ ๋ํ๋ ํ์ดํ ํจ์
console.log(a2(1, 2)); // 3์ ์ถ๋ ฅ
let a3 = (a, b = 20) => console.log(a, b); // ๊ธฐ๋ณธ๊ฐ์ด ์๋ ํจ์
a3(10); // 10๊ณผ 20์ ์ถ๋ ฅ
โ๏ธ๋ฌธ๋ฒ2 : ๋งค๊ฐ๋ณ์๊ฐ 1๊ฐ๋ผ๋ฉด, ๋งค๊ฐ๋ณ์ ์๋ฆฌ์ `()`๋ฅผ ์๋ตํ ์ ์์ต๋๋ค.
let a1 = a => console.log(a); // ๋งค๊ฐ๋ณ์๊ฐ 1๊ฐ์ด๋ฏ๋ก () ์๋ตโจ
console.log(a1(1));
โ๏ธ๋ฌธ๋ฒ3 : ๊ฐ์ฒด๋ฅผ ๋ฐํ ํ ๋๋ `()`๋ก ๋ฌถ์ด์ผ ํฉ๋๋ค. (ํจ์ ๋ธ๋ก๊ณผ ๊ตฌ๋ถํ๊ธฐ ์ํจ)
let a5 = a => ({"name": a}); // ์ธ์ a๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ํ์ดํ ํจ์โจ
console.log(a5("ํ")); // { name: 'ํ' } ์ถ๋ ฅ
ํ์ดํ ํจ์๋ ๋ฐฐ์ด ๋ฉ์๋(forEach, filter, map ๋ฑ)์์ ์ฝ๋ฐฑ ํจ์๋ก ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๋ฉ์๋๋ค์ ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ์ํํ๋ฉฐ ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
forEach - ๋ฐ๋ณต๋ฌธ
`forEach` ๋ฉ์๋ : ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ๋ฐ๋ณตํ๋ฉฐ ์ฃผ์ด์ง ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํํฉ๋๋ค.
array.forEach(callbackFunction(currentValue, index, array), thisArg);
// currentValue: ํ์ฌ ์์
// index: ํ์ฌ ์ธ๋ฑ์ค
// array: ํ์ฌ ๋ฐฐ์ด
// thisArg: ์ฝ๋ฐฑ ํจ์ ๋ด์์ this๋ก ์ฌ์ฉ๋ ๊ฐ
// ์์ 1: ์ผ๋ฐ ํจ์ ์ฌ์ฉ
list.forEach(function(x, y, z) {
console.log(x, y, z);
});
// ์์ 2: ํ์ดํ ํจ์ ์ฌ์ฉโจ
list.forEach((x, y, z) => console.log(x, y, z));
filter - ์กฐ๊ฑด ํํฐ๋ง
`filter` ๋ฉ์๋ : ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ๋ฐ๋ณตํ์ฌ ์กฐ๊ฑด์ ๋ง๋ ์์๋ง์ผ๋ก ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํฉ๋๋ค.
array.filter(callbackFunction(currentValue, index, array), thisArg);
// ์์ 1: ์ผ๋ฐ ํจ์ ์ฌ์ฉ
var result = list.filter(function(x) {
return x % 2 == 0; // ์ง์๋ง ๋ฐํ
});
console.log(`result: ${result}`); // 2, 4, 6, 8, 10
// ์์ 2: ํ์ดํ ํจ์ ์ฌ์ฉโจ
var result = list.filter(x => x % 2 == 0);
map - ๋ฐฐ์ด ๋ณํ
`map` ๋ฉ์๋ : ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ฃผ์ด์ง ํจ์๋ฅผ ์คํํ์ฌ ๋ณํ๋ ๊ฒฐ๊ณผ๋ก ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํฉ๋๋ค.
array.map(callbackFunction(currentValue, index, array), thisArg);
// ์์ 1: ์ผ๋ฐ ํจ์ ์ฌ์ฉ
var result2 = list.map(function(x) {
return x * x; // ์ ๊ณฑ์ ๋ฐํ
});
console.log(`result2: ${result2}`); // 1, 4, 9, 16, ..., 100
// ์์ 2: ํ์ดํ ํจ์ ์ฌ์ฉโจ
var result2 = list.map(x => x * x);
this ํค์๋
`this` ํค์๋๋ ํจ์๋ฅผ ํธ์ถํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฉฐ, ์ผ๋ฐ ํจ์์ ํ์ดํ ํจ์์์์ ๋์์ด ๋ค๋ฆ ๋๋ค. ์ผ๋ฐ ํจ์๋ ํธ์ถ ๋ฐฉ์์ ๋ฐ๋ผ this๊ฐ ๋ค๋ฅด๊ฒ ๋ฐ์ธ๋ฉ๋์ง๋ง, ํ์ดํ ํจ์๋ ์์ ์ค์ฝํ์ this๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
const obj = {
value: 10, // ๊ฐ์ฒด์ ์์ฑ
normalFunc: function() {
console.log(this.value); // ์ผ๋ฐ ํจ์: this๋ obj ์ฐธ์กฐ
},
arrowFunc: () => {
console.log(this.value); // ํ์ดํ ํจ์: this๋ ์์ ์ค์ฝํ ์ฐธ์กฐ (arrowFunc๊ฐ ์ ์๋ ์์ ์ ์์ ์ค์ฝํ๋ ์ ์ญ ์ค์ฝํ)โจ
}
};
obj.normalFunc(); // 10 ์ถ๋ ฅ: this๊ฐ obj๋ฅผ ์ฐธ์กฐํ๋ฏ๋ก value๋ 10
obj.arrowFunc(); // undefined ์ถ๋ ฅ: this๊ฐ ์ ์ญ ์ค์ฝํ๋ฅผ ์ฐธ์กฐํ๋ฏ๋ก value๊ฐ ์์ด์ undefinedโจ
3๏ธโฃ ํด๋์ค (Class)
ํด๋์ค๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํ ํ ํ๋ฆฟ ์ญํ ์ ํฉ๋๋ค. ES6์์๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ์์ฑํ๊ณ , ์์์ ํตํด ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
โ๏ธ์์ 1
// ES6 - ์ผ๋ฐ HTML์์๋ ๊ตณ์ด ์ธ ํ์๋ ์์
class Person {
// ๋ฉค๋ฒ๋ณ์ (ํค์๋๋ฅผ ์ ์ง ์์)โจ
name = "ํ๊ธธ๋";
age = 20;
// ์์ฑ์ - ํ๋๋ง ์์ฑํ ์ ์์โจ
constructor(addr) {
this.addr = addr; // ์๋์ผ๋ก ๋ฉค๋ฒ๋ณ์ addr์ ์ถ๊ฐํด์ค
}
// ํ์ดํ ํจ์๋ก ์ ์๋ ๋ฉ์๋
func = () => {
console.log("ํจ์1");
}
// ์ด๋ฆ์ ๋ฐํํ๋ ๋ฉ์๋
getName = () => {
return this.name;
}
}
// ๊ฐ์ฒด ์์ฑ
let p1 = new Person("์์ธ์");
console.log(p1.addr); // "์์ธ์" ์ถ๋ ฅ
console.log(p1.age); // 20 ์ถ๋ ฅ
console.log(p1.name); // "ํ๊ธธ๋" ์ถ๋ ฅ
console.log(p1.getName()); // "ํ๊ธธ๋" ์ถ๋ ฅ
p1.func(); // "ํจ์1" ์ถ๋ ฅ
// ์์ฑ์๊ฐ ์๋๋ผ๋ ๊ธฐ๋ณธ ์์ฑ์๋ก ๊ฐ์ฒด ์์ฑ ๊ฐ๋ฅ
let p2 = new Person(); // addr์ด undefined๋ก ์ด๊ธฐํ๋จ
console.log(p2.addr); // undefined ์ถ๋ ฅ
โ๏ธ์์ 2(์์)
class Shape {
// Shape ํด๋์ค์ ๋ฉ์๋
func = () => {
console.log("test");
}
}
class Rect extends Shape {
// ์์ฑ์ ์์ฑ
constructor(width, height) {
super(); // ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถ (ํ์)โจ
this.width = width; // width ์์ฑ ์ด๊ธฐํ
this.height = height; // height ์์ฑ ์ด๊ธฐํ
}
// func ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉโจ
func = () => {
console.log("์ค๋ฒ๋ผ์ด๋ฉ");
}
}
// Rect ํด๋์ค์ ์ธ์คํด์ค ์์ฑ
let r = new Rect(10, 20); // width์ height๋ฅผ ์ ๋ฌํ์ฌ ์ธ์คํด์ค ์์ฑ
r.func(); // "์ค๋ฒ๋ผ์ด๋ฉ" ์ถ๋ ฅ
4๏ธโฃ ๋ชจ๋ (Module)
ES6์ ๋ชจ๋ ์์คํ ์ ๋ณ์, ํจ์, ํด๋์ค ๋ฑ์ ๋ณ๋์ ํ์ผ๋ก ๋๋์ด ๊ด๋ฆฌํ๊ณ , ํ์ํ ๊ธฐ๋ฅ๋ง ์ ํ์ ์ผ๋ก ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
โ๏ธ`Export`(Named/Default) : ๋ชจ๋์์ ๋ณ์๋ฅผ ๋ด๋ณด๋ด๋ ๋ฐฉ๋ฒ
// Named Export : ํน์ ๋ณ์๋ ํจ์๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๋ด๋ณด๋ผ ๋ ์ฌ์ฉโจ
export const PI = 3.14;
export function add(a, b) { return a + b; }
export function subtract(a, b) { return a - b; }
// Default Export : ํ๋์ ์ฃผ๋ ๊ฐ์ด๋ ๊ฐ์ฒด๋ฅผ ๋ด๋ณด๋ผ ๋ ์ฌ์ฉโจ
const greeting = "Hello, World!";
export default greeting;
โ๏ธ`Import`(Named/Default) : ๋ด๋ณด๋ธ ๋ชจ๋์ ๋ค๋ฅธ ํ์ผ์์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ
// Named Import : ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉ(Alias ๊ฐ๋ฅ)โจ
import { PI, add as sum, subtract } from './mathUtils.js';
// Default Import : ๊ธฐ๋ณธ์ผ๋ก ๋ด๋ณด๋ธ ํ๋์ ๊ฐ์ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉ(๋ณ์๋ช
์์ ์ง์ ๊ฐ๋ฅ)โจ
import greetingMessage from './mathUtils.js';
// Import All : ๋ชจ๋ ๊ฐ์ ํ ๋ฒ์ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉโจ
import * as mathUtils from './mathUtils.js';
HTML ํ์ผ์์ ES6์ ๋ชจ๋ ์์คํ ์ ์ฌ์ฉํ๋ ค๋ฉด `<script type="module">`์ ์์ฑํด์ผ ํฉ๋๋ค.
<script type="module" src="yourModule.js"></script>
5๏ธโฃ ๊ตฌ์กฐ ๋ถํด ํ ๋น (Destructuring Assignment)
๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์๋ฅผ ๋ณ์์ ํ ๋นํ๋ ๋ฌธ๋ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ถ์ถํ๊ณ ์ฌ์ฉํ ์ ์์ต๋๋ค.
โ๏ธ๋ฐฐ์ด [a, b, ...]
let arr = [1, 2, 3, 4];
// ๋ฐฐ์ด ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ์ฌ์ฉํ์ฌ ๊ฐ ์์๋ฅผ ๋ณ์์ ํ ๋น
let [a, b, c, d] = arr; // ์์น ์์ ๋ฐํโจ
console.log(a, b, c, d); // 1 2 3 4
// ํน์ ์์๋ง ์ ํํ์ฌ ๋ณ์์ ํ ๋น (์ค๊ฐ ์์๋ ์๋ต)
let [n1, , , n4] = arr; // n1์ ์ฒซ ๋ฒ์งธ ์์, n4๋ ๋ค ๋ฒ์งธ ์์โจ
console.log(n1, n4); // 1 4
// ๋๋จธ์ง ์์๋ฅผ ๋ฐฐ์ด๋ก ํ ๋น
let [...x] = arr; // arr์ ๋ชจ๋ ์์๋ฅผ ๋ณต์ฌํ์ฌ x์ ํ ๋นโจ
console.log(x); // [1, 2, 3, 4]
// ์์ ๋ ์์๋ฅผ ๊ฐ๋ณ ๋ณ์๋ก ํ ๋นํ๊ณ ๋๋จธ์ง ์์๋ฅผ ๋ฐฐ์ด๋ก ํ ๋น
let [k1, k2, ...y] = arr; // k1์ ์ฒซ ๋ฒ์งธ ์์, k2๋ ๋ ๋ฒ์งธ ์์, y๋ ๋๋จธ์ง ์์โจ
console.log(k1, k2, y); // 1 2 []
โ๏ธ๋จ์ผ ๊ฐ์ฒด {"key1": "value", "key2": "value"}
let obj = { "name": "ํ๊ธธ๋", "age": 20 };
// ๊ฐ์ฒด์ ์์ฑ์ ์ ๊ทผํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ
console.log(obj["name"], obj.name);
// ์ ๋ ๊ฐ์ง ๋ฐฉ์ ๋ชจ๋ ๊ฐ์ฒด์ ์์ฑ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
// obj["name"]์ ๋ฌธ์์ด๋ก ์์ฑ๋ช
์ ์ ๊ทผํ๋ ๋ฐฉ์์ด๊ณ , obj.name์ ์ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๋ฐฉ์์
๋๋ค.
// ๋ ๋ฐฉ๋ฒ ๋ชจ๋ "ํ๊ธธ๋"์ ์ถ๋ ฅํฉ๋๋ค.
// ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ์ฌ์ฉํ์ฌ ์์ฑ์ ๋ณ์์ ํ ๋น
let { name, age } = obj; // name๊ณผ age ๋ณ์๋ฅผ obj์์ ์ง์ ์ถ์ถโจ
// obj์์ "name"๊ณผ "age" ์์ฑ ๊ฐ์ ๊ฐ๊ฐ name๊ณผ age๋ผ๋ ๋ณ์์ ๋ฐ๋ก ํ ๋นํ๋ ๋ฐฉ์์
๋๋ค.
// ์ด์ name์ "ํ๊ธธ๋", age๋ 20์ด ๋ฉ๋๋ค.
// ํน์ ์์ฑ์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ
let { name: i1, age: i2 } = obj; // name์ i1์ผ๋ก, age๋ฅผ i2๋ก ์ฌํ ๋นโจ
// ๊ตฌ์กฐ ๋ถํด ํ ๋น ์ ์์ฑ๋ช
์ ์ํ๋ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
// ์ฌ๊ธฐ์๋ obj์ "name"์ i1์ด๋ผ๋ ๋ณ์๋ก, "age"๋ฅผ i2๋ผ๋ ๋ณ์๋ก ํ ๋นํฉ๋๋ค.
โ๏ธ๋ฐฐ์ด ๊ฐ์ฒด [ {"key1": "value", "key2": "value"}, {"key1": "value2", "key2": "value2"} ]
let list = [
{
"num": 1,
"title": "hello",
"info": ["apple", "banana"],
"profile": { birth: "2020", img: "abc.png" }
},
{
"num": 2,
"title": "bye",
"info": ["melon", "orange"],
"profile": { birth: "2024", img: "abcddddd.png" }
},
];
// ๋ ๋ฒ์งธ ๊ฐ์ฒด์ ์ ๊ทผ
let [, a] = list; // ์ฒซ ๋ฒ์งธ ๊ฐ์ฒด๋ฅผ ๊ฑด๋๋ฐ๊ณ ๋ ๋ฒ์งธ ๊ฐ์ฒด๋ฅผ a์ ํ ๋นโจ
console.log(a); // { num: 2, title: 'bye', info: [ 'melon', 'orange' ], profile: { birth: '2024', img: 'abcddddd.png' } }
// ๋ ๋ฒ์งธ ๊ฐ์ฒด์ num๊ณผ title ์์ฑ์ ์ ๊ทผ
let [, { num, title }] = list; // ๋ ๋ฒ์งธ ๊ฐ์ฒด์์ num๊ณผ title์ ์ถ์ถโจ
console.log(num, title); // 2 'bye'
// ๋ ๋ฒ์งธ ๊ฐ์ฒด์ info ๋ฐฐ์ด์์ ์์์ ์ ๊ทผ
let [, { info: [x, y] }] = list; // ๋ ๋ฒ์งธ ๊ฐ์ฒด์ info ๋ฐฐ์ด์์ ์ฒซ ๋ฒ์งธ์ ๋ ๋ฒ์งธ ์์๋ฅผ x์ y์ ํ ๋นโจ
console.log(x, y); // 'melon' 'orange'
// ๋ ๋ฒ์งธ ๊ฐ์ฒด์ profile ์์ ์๋ birth์ img๋ฅผ ํ ๋ฒ์ ์ถ์ถ
let [, { profile: { birth, img } }] = list; // profile ์์ฑ์ birth์ img๋ฅผ ์ถ์ถโจ
console.log(birth, img); // '2024' 'abcddddd.png'
6๏ธโฃ ์ ๊ฐ๊ตฌ๋ฌธ (Spread Operator)
๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด์ ์ฌ์ฉํ ์ ์๋ ๋ฌธ๋ฒ์ผ๋ก, ๋ฐฐ์ด์ด๋ ๋ฌธ์์ด ๋ฑ์ ๊ฐ๋ณ ์์๋ก ์ ๊ฐ์ํฌ ์ ์์ต๋๋ค.
โ๏ธ์ ๊ฐ ๊ตฌ๋ฌธ ์ฌ์ฉ ์์
const arr = [1, 2, 3];
console.log(...arr); // 1 2 3โจ
// ๋ฐฐ์ด์ ์ถ๊ฐ
const num = [10, 20, 30, ...arr];
console.log(num); // [10, 20, 30, 1, 2, 3]
// ๋ฐฐ์ด ์ค๊ฐ์ ์ถ๊ฐ
const num2 = [10, ...arr, 20, 30];
console.log(num2); // [10, 1, 2, 3, 20, 30]
// ๋ฐฐ์ด์ ๋ณต์ฌ
const num3 = [...arr];
console.log(num3); // [1, 2, 3]
// ๋ฐฐ์ด์ ๊ฒฐํฉ
const num4 = [...arr, ...arr, ...arr];
console.log(num4); // [1, 2, 3, 1, 2, 3, 1, 2, 3]
โ๏ธํจ์ ํธ์ถ ์ ์ ๊ฐ ๊ตฌ๋ฌธ ์ฌ์ฉ ์์
const arr = [1, 2, 3];
function sum(x, y, z) {
return x + y + z;
}
// sum(1, 2, 3) ํธ์ถ
console.log(sum(...arr)); // 6โจ
console.log(sum(10, 20, ...arr)); // 33
โ๏ธ๊ฐ๋ณ์ ๋งค๊ฐ๋ณ์ ์ฒ๋ฆฌ
function sum3(x, ...arr) {
return [x, ...arr];
}
console.log(sum3(1, 2, 3, 4, 5, 6)); // [1, 2, 3, 4, 5, 6]
console.log(sum3(1, 2, 3, 4)); // [1, 2, 3, 4]
console.log(sum3(1)); // [1]
console.log(sum3(...[1, 2, 3])); // [1, 2, 3]โจ
โ๏ธ๊ธฐ๋ณธ(default) ๋งค๊ฐ๋ณ์ ์ฒ๋ฆฌ
function sum4(x, y = 10, z = 20) {
return x + y + z;
}
console.log(sum4(1)); // 31โจ
console.log(sum4(1, 2)); // 23
console.log(sum4(1, 2, 3)); // 6
console.log(sum4(1, ...[1, 2, 3])); // 4
7๏ธโฃ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด (Template Literal)
ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ํตํด ๊ฐ๋ ์ฑ์ด ๋ฐ์ด๋ ๋ฉํฐ๋ผ์ธ ๋ฌธ์์ด๊ณผ ๋ณ์ ์ฝ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
โ๏ธํ ํ๋ฆฟ ๋ฆฌํฐ๋ด์ `${}`๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์ผ๋ก ๊ฐ์ ์ฝ์ ํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ฌธ์์ด์ ๋ฐ๋์ ๋ฐฑํฑ(`)์ผ๋ก ๊ฐ์ธ์ผ ํฉ๋๋ค.
let name = "์ด์์ "; // ์ด๋ฆ ๋ณ์ ์ ์ธ
let age = 20; // ๋์ด ๋ณ์ ์ ์ธ
// ๋ฌธ์์ด ์ฐ๊ฒฐ์ ์ฌ์ฉํ ์ถ๋ ฅ
console.log(name + "๋์ ๋์ด๋ " + age + "์
๋๋ค");
// ํ
ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ ์ถ๋ ฅโจ
console.log(`${name}๋์ ๋์ด๋ ${age}์
๋๋ค`);
// ์กฐ๊ฑด๋ถ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ถ๋ ฅโจ
console.log(`${age < 20 ? `20๋ณด๋ค ์์` : `20๋ณด๋ค ํผ`}`);
8๏ธโฃ for of๋ฌธ
โ๏ธ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด(iterable)๋ฅผ ๋ฐ๋ณตํ์ฌ ๊ฒฐ๊ณผ๊ฐ์ ์ป์ผ๋ฉฐ, `forEach` ๋ฌธ์์๋ ์ง์ํ์ง ์๋ `break`, `continue`, `return` ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
// ๋ฐฐ์ด ์ ์ธ
let arr = [1, 2, 3, 4, 5];
// 1. for...in ๋ฃจํ (์ธ๋ฑ์ค ๊ธฐ๋ฐ)
// for (var i in arr) {
// console.log(i); // ์ธ๋ฑ์ค ์ถ๋ ฅ
// console.log(arr[i]); // ๊ฐ ์ถ๋ ฅ
// }
// 2. forEach ๋ฉ์๋ (๋ฐฐ์ด ์์์ ๋ํด ๋ฐ๋ณต)
// arr.forEach(function(value, index) {
// console.log(index, "๋", value); // ์ธ๋ฑ์ค์ ๊ฐ ์ถ๋ ฅ
// });
// 3. for...of ๋ฃจํ (๊ฐ ๊ธฐ๋ฐ)โจ
for (let i of arr) {
console.log(i); // i๋ ๋ฐฐ์ด์ ๊ฐ
}
// ๋ฐฐ์ด ๊ฐ์ฒด๋ฅผ ๊ฐ์ง ๋ฐฐ์ด ์ ์ธ
let arr2 = [{ a: 1, b: "ํ๊ธธ๋" }, { a: 2, b: "์ด์์ " }];
// 4. ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ์ฌ์ฉํ for...of ๋ฃจํโจ
for (let { a, b } of arr2) {
console.log(a, b); // a์ b์ ๊ฐ ์ถ๋ ฅ
}
'๐งฉFront-End' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] Props ์ ๋ฌ ๋ฐฉ๋ฒ 10๊ฐ์ง ์์ ๋ก ์ดํด๋ณด๊ธฐ (2) | 2024.09.06 |
---|---|
[React] JSX ๋ฌธ๋ฒ 17๊ฐ์ง ๋น ๋ฅด๊ฒ ์ดํด๋ณด๊ธฐ (0) | 2024.09.06 |
[๋ชฉ์ฐจ] ๋ฆฌ์กํธ๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ์ (๊ฐ์ ํ) (2) | 2024.08.31 |
[React] ๋ฆฌ์กํธ ๊ฐ์ ๋ฐ ํ๊ฒฝ์ค์ ๊ฐ์ด๋ (0) | 2024.08.31 |