๐Ÿ’จ ํŒจ์ŠคํŠธ์บ ํผ์Šค/๊ณต๋ถ€ ๊ธฐ๋ก

[221101] JS : ํ‘œ์ค€๋‚ด์žฅ๊ฐ์ฒด 3

Jane K 2022. 11. 17. 01:41

 

 

1. ๋ฐฐ์—ด

  • splice : ๋Œ€์ƒ ๋ฐฐ์—ด์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์ƒ ๋ฐฐ์—ด ์›๋ณธ์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
  • arr.splice(์‹œ์ž‘ ์ธ๋ฑ์Šค, ์‚ญ์ œํ•  ์š”์†Œ ๊ฐœ์ˆ˜, ์ถ”๊ฐ€ํ•  ์š”์†Œ
  • ์š”์†Œ ์ถ”๊ฐ€ : arr.splice(2๋ฒˆ ์ธ๋ฑ์Šค, 0๊ฐœ ์‚ญ์ œ, ๊ทธ์ž๋ฆฌ์— 'X' ์ถ”๊ฐ€)
const arr = ['A', 'B', 'C']
arr.splice(2, 0, 'X')

console.log(arr) // ['A', 'B', 'X', 'C']
  • ์š”์†Œ ์‚ญ์ œ : arr.splice(1๋ฒˆ ์ธ๋ฑ์Šค, 1๊ฐœ ์‚ญ์ œ)
const arr = ['A', 'B', 'C']
arr.splice(1, 1)

console.log(arr) // ['A', 'C']
  • ์š”์†Œ ๊ต์ฒด : arr.splice(1๋ฒˆ ์ธ๋ฑ์Šค, 1๊ฐœ ์‚ญ์ œ, ๊ทธ์ž๋ฆฌ์— 'X' ์ถ”๊ฐ€)
const arr = ['A', 'B', 'C']
arr.splice(1, 1, 'X')

console.log(arr) // ['A', 'X', 'C']
  • ์š”์†Œ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ : arr.splice(0๋ฒˆ ์ธ๋ฑ์Šค, 0๊ฐœ ์‚ญ์ œ, ๊ทธ์ž๋ฆฌ์— 'X', 'Y', 'Z' ์ถ”๊ฐ€)
const arr = ['A', 'B', 'C']
arr.splice(0, 0, 'X', 'Y', 'Z')

console.log(arr) // ['X', 'Y', 'Z', 'A', 'B', 'C']

 

 

 

  • ํ”„๋กœํ†  ํƒ€์ž… ๋ฉ”์„œ๋“œ : ๋ฐ์ดํ„ฐ์— ๋ถ™์—ฌ์„œ ์“ฐ๋Š” ๋ฉ”์„œ๋“œ
  • ์ •์  ๋ฉ”์„œ๋“œ : class ๊ฐ์ฒด์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ ๋ฐฐ์—ด์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ

2. Array

(1) Array.from

  • ์œ ์‚ฌ ๋ฐฐ์—ด(Array-like)์„ ์‹ค์ œ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜.
  • li ํƒœ๊ทธ ๋ชจ๋‘๋ฅผ querySelectorAll ๋กœ ๊ฐ€์ ธ์˜จ ์š”์†Œ๋ฅผ console.log ํ•ด๋ณด๋ฉด nodelist ๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ nodelist ๋Š” ์œ ์‚ฌ๋ฐฐ์—ด. ์œ ์‚ฌ๋ฐฐ์—ด์€ ๊ฐ์ฒด๋ฐ์ดํ„ฐ๋กœ ๋ฐฐ์—ด๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹˜.
  • Array.from(liEls).map( ) → from ์œผ๋กœ ๊ฐ์‹ธ์ฃผ๋ฉด ์œ ์‚ฌ ๋ฐฐ์—ด์„ ์‹ค์ œ ๋ฐฐ์—ด๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅ.
  • ๋‹ค๋งŒ, ๊ฐ key ๊ฐ’์ด ์ œ๋กœ๋ฒ ์ด์Šค ๋„˜๋ฒ„๋ง์ด ๋˜์–ด์žˆ๊ณ  ๋งˆ์ง€๋ง‰์—๋Š” length ์™€ ๊ทธ ๊ฐ’์ด ์žˆ์–ด์•ผ ํ•จ.

 

(2) Array.isArray

  • ๋ฐฐ์—ด ๋ฐ์ดํ„ฐ์ธ์ง€ ํ™•์ธ.
  • ์ค‘๊ด„ํ˜ธ ์•ˆ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐฐ์—ด ๋ฐ์ดํ„ฐ์ธ์ง€ ํ™•์ธํ•˜์—ฌ ๋ฐ˜ํ™˜

 

 

 

3. Object

(1) Object.assign

  • ํ•˜๋‚˜ ์ด์ƒ์˜ ์ถœ์ฒ˜(Source) ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ๋Œ€์ƒ(Target) ๊ฐ์ฒด๋กœ ์†์„ฑ์„ ๋ณต์‚ฌํ•˜๊ณ  ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜.
  • ๋‘๊ฐœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” concat ๋ฉ”์„œ๋“œ์™€ ์œ ์‚ฌ
  • ์ธ์ˆ˜๋Š” ์ตœ์†Œ ๋‘๊ฐœ ์ด์ƒ์„ ๋„ฃ์–ด์ค˜์•ผ ํ•จ ํ•œ๊ณ„๋Š” ์—†์Œ
const target = { a: 1, b: 2 }
const source1 = { b: 3, c: 4 }
const source2 = { c: 5, d: 6 }
const result = Object.assign(target, source1, source2)

console.log(target) // { a: 1, b: 3, c: 5, d: 6 }
console.log(result) // { a: 1, b: 3, c: 5, d: 6 }

→ ์›๋ณธ ๋ฐ์ดํ„ฐ์ธ target ์ด ๋ณ€๊ฒฝ๋˜๊ณ  result ์— ๋“ค์–ด๊ฐ, const result = target ๊ณผ ๊ฐ™์€ ์˜๋ฏธ

→ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ์—์„œ ์†์„ฑ์˜ ์ด๋ฆ„(key) ๋Š” ๊ณ ์œ ํ•จ, ๋˜‘ ๊ฐ™์€ ์ด๋ฆ„์€ ์กด์žฌํ•  ์ˆ˜ ์—†์Œ. ๋”ฐ๋ผ์„œ ์•ž์˜ ๋ฐ์ดํ„ฐ๋Š” ๋‚ ๋ผ๊ฐ€๊ณ  ๋’ค์—์„œ ๋ฎ์–ด์“ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜.

 

  • ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ ค๋ฉด, ๋นˆ ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ
const target = { a: 1, b: 2 }
const source1 = { b: 3, c: 4 }
const source2 = { c: 5, d: 6 }
const result = Object.assign({}, target, source1, source2)

console.log(target) // { a: 1, b: 2 }
console.log(result) // { a: 1, b: 3, c: 5, d: 6 }

 

  • ์ „๊ฐœ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
const target = { a: 1, b: 2 }
const source1 = { b: 3, c: 4 }
const source2 = { c: 5, d: 6 }
const result = {
  ...target,
  ...source1,
  ...source2
}

console.log(target) // { a: 1, b: 2 }
console.log(result) // { a: 1, b: 3, c: 5, d: 6 }

→ ์›๋ณธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ

 

 

(2) Object.keys

  • ์ฃผ์–ด์ง„ ๊ฐ์ฒด์˜ ์†์„ฑ ์ด๋ฆ„์„ ๋‚˜์—ดํ•œ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜.

 

(3) Object.values

  • ์ฃผ์–ด์ง„ ๊ฐ์ฒด์˜ ์†์„ฑ ๊ฐ’์„ ๋‚˜์—ดํ•œ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜.

 

(4) Object.entries

  • ์ฃผ์–ด์ง„ ๊ฐ์ฒด์˜ ๊ฐ ์†์„ฑ๊ณผ ๊ฐ’์œผ๋กœ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด ๋งŒ๋“ค์–ด ์š”์†Œ๋กœ ์ถ”๊ฐ€ํ•œ 2์ฐจ์› ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜.
  • 2์ฐจ์› ๋ฐฐ์—ด์€ ๋ฐฐ์—ด ์•ˆ์— ๋ฐฐ์—ด์ด ๋“ค์–ด๊ฐ„ ๊ฒƒ์„ ์˜๋ฏธ.
  • for in, for of, object.keys, object.entries ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ• ์žˆ์Œ

 

(5) Object.freeze ์™€ Object.isFrozen

  • ์ฃผ์–ด์ง„ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋„๋ก ๋™๊ฒฐํ•˜๊ฑฐ๋‚˜, ๋™๊ฒฐ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ.

 

(6) Object.seal ๊ณผ Object.isSealed

  • ์ฃผ์–ด์ง„ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋„๋ก ๋ฐ€๋ด‰ํ•˜๊ฑฐ๋‚˜, ๋ฐ€๋ด‰ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ.
  • ๋™๊ฒฐ๊ณผ ๋‹ค๋ฅธ ์ ์€ ๋ฐ€๋ด‰ ํ›„์—๋„ ์†์„ฑ์˜ ๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ.
  • ์ถ”๊ฐ€, ์‚ญ์ œ๋Š” ์•ˆ๋˜์ง€๋งŒ ์ˆ˜์ •์€ ๊ฐ€๋Šฅ.

 

(7) Object.defineProperty

  • ์ฃผ์–ด์ง„ ๊ฐ์ฒด์— ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ํŠน์„ฑ์„ ๋ณ€๊ฒฝ.

 

const user = {}

Object.defineProperty(user, 'name', {
  value: 'Heropy'
})

console.log(user.name) // 'Heropy'

// ์—ด๊ฑฐ ๋ถˆ๊ฐ€
for (const key in user) {
  console.log('key:', key) // ์ถœ๋ ฅ ์—†์Œ
}

// ์ˆ˜์ • ๋ถˆ๊ฐ€
user.name = 'Neo'
console.log(user.name) // 'Heropy'

// ์‚ญ์ œ ๋ถˆ๊ฐ€
delete user.name
console.log(user.name) // 'Heropy'

→ ์†์„ฑ์„ true ๋กœ ๋”ฐ๋กœ ์ •์˜ํ•˜์ง€ ์•Š์•„์„œ ๋ชจ๋‘ ๊ธฐ๋ณธ๊ฐ’์ด false ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ด๊ฑฐ, ์ˆ˜์ •, ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€ํ•œ ๊ฒƒ

 

const user = {
  _name: "Heropy",
};

Object.defineProperty(user, "name", {
  get() {
    return this._name;
  },
  set(value) {
    this._name = value;
    console.log(`์ด๋ฆ„์ด ${value}๋กœ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค!`);
  },
});

// Get!
console.log(user.name); // 'Heropy'

// Set!
user.name = "Neo"; // '์ด๋ฆ„์ด Neo๋กœ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค!'

for (let key in user) {
  console.log(key); // '_name'
}

_ ๋Š” ์–ธ์ œ ์—†์–ด์ ธ๋„ ์ด์ƒํ•˜์ง€ ์•Š์„ ๋ฐ์ดํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์กฐํšŒ๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์•”๋ฌต์ ์œผ๋กœ ์“ฐ์ง€๋ง๋ผ๊ณ  ์ง€์ •ํ•ด๋†“์€ ๊ฒƒ.

this : user

get : ์กฐํšŒํ•  ๋•Œ ๋™์ž‘ํ•˜๋Š” ํ•จ์ˆ˜

set : ์ง€์ •ํ•  ๋•Œ ๋™์ž‘ํ•˜๋Š” ํ•จ์ˆ˜. ์ด ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•  ๋•Œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ value ๋Š” 'Neo'

 

(8) Object.defineProperties

  • ์ฃผ์–ด์ง„ ๊ฐ์ฒด์— ์—ฌ๋Ÿฌ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ํŠน์„ฑ์„ ๋ณ€๊ฒฝ.
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์†์„ฑ์„ ํ•œ๊บผ๋ฒˆ์— ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ์Œ
const user = {};

Object.defineProperties(user, {
  name: {
    enumerable: true,
    value: "Heropy",
  },
  age: {
    enumerable: true,
    value: 85,
  },
  email: {
    enumerable: true,
    configurable: true,
    writable: true,
    value: [],
  },
  address: {
    value: "๊ฒฝ๊ธฐ ์ˆ˜์›์‹œ",
  },
});

console.log(user);

for (const key in user) {
  console.log(key);
}
// 'name'
// 'age'
// 'email'

 

 

 

 

4. JSON

  • JSON(JavaScript Object Notation)๋Š” ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ์œ„ํ•œ ํ‘œ์ค€ ๋ฐ์ดํ„ฐ ํฌ๋งท.
    • ๋ฌธ์ž, ์ˆซ์ž, ๋ถˆ๋ฆฐ, Null, ๊ฐ์ฒด, ๋ฐฐ์—ด๋งŒ ์‚ฌ์šฉ
    • ๋ฌธ์ž๋Š” ํฐ ๋”ฐ์˜ดํ‘œ๋งŒ ์‚ฌ์šฉ
    • ํ›„ํ–‰ ์‰ผํ‘œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€ → ๋‹ค์Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š”๋ฐ๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋์— ์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ
    • .json ํ™•์žฅ์ž ์‚ฌ์šฉ

 

(1) stringify

    • JavaScript ๋ฐ์ดํ„ฐ๋ฅผ JSON ๋ฌธ์ž๋กœ ๋ณ€ํ™˜.
console.log(JSON.stringify("Hello world!")); // '"Hello world!"'
console.log(JSON.stringify(123)); // '123'
console.log(JSON.stringify(false)); // 'false'
console.log(JSON.stringify(null)); // 'null'
console.log(JSON.stringify({ name: "Heropy", age: 85 })); // '{"name":"Heropy","age":85}'
// console.log(JSON.stringify({ name: 'Heropy', age: 85 }, null, 2))
console.log(JSON.stringify([1, 2, 3])); // '[1,2,3]'

 

(2) parse

  • JSON ๋ฌธ์ž๋ฅผ ๋ถ„์„ํ•ด JavaScript ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜.
console.log(JSON.parse('"Hello world!"')); // "Hello world!"
console.log(JSON.parse("123")); // 123
console.log(JSON.parse("false")); // false
console.log(JSON.parse("null")); // null
console.log(JSON.parse('{"name":"Heropy","age":85}')); // { name: 'Heropy', age: 85 }
console.log(JSON.parse("[1,2,3]")); // [1, 2, 3]

 

 

 

 

5. ๋ชจ๋“ˆ

  • ๋ชจ๋“ˆ(Module)์€ ์ดํ•ด ๊ฐ€๋Šฅํ•œ, ๋ณด๋‹ค ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ ์ง„ ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
  • ํŠนํžˆ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ชจ๋“ˆ์€ ํŠน์ • ๋ฐ์ดํ„ฐ๋“ค์˜ ์ง‘ํ•ฉ(ํŒŒ์ผ)์ž…๋‹ˆ๋‹ค.

 

(1) ๋‚ด๋ณด๋‚ด๊ธฐ(export)

  • ๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ด๊ธฐ(Default exports) : ์ด๋ฆ„ X (์„ ํƒ), ๋ชจ๋“ˆ๋‹น 1๋ฒˆ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
export default ๋ฐ์ดํ„ฐ;

 

  • ์ด๋ฆ„ ๋‚ด๋ณด๋‚ด๊ธฐ(Named exports) : ์ด๋ฆ„ ํ•„์ˆ˜, ๋ชจ๋“ˆ๋‹น n๋ฒˆ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
export const ์ด๋ฆ„1 = ๋ฐ์ดํ„ฐ1;
export const ์ด๋ฆ„2 = ๋ฐ์ดํ„ฐ2;

 

  • ์‚ฌ์šฉ ํŒจํ„ด
export default {
  name: "๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ!",
  desc: "์ด๋ฆ„ ํ•„์š” ์—†์Œ!",
};

export const str = "Hello~";
export const num = 123;
export const arr = ["A", "B", "C"];
export function hello() {}

 

  • as ํ‚ค์›Œ๋“œ : ๋‚ด๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ์˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ
const a = "Named!";
const b = 123;
const c = ["A", "B", "C"];
function d() {}
export { a as str, b as num, c as arr, d as hello };

 

(2) ๊ฐ€์ ธ์˜ค๊ธฐ(Imports)

  • ๊ตฌ์กฐ : import ๊ธฐ๋ณธ๋ฐ์ดํ„ฐ, { ์ด๋ฆ„๋ฐ์ดํ„ฐ1, ์ด๋ฆ„๋ฐ์ดํ„ฐ2 } from '๊ฒฝ๋กœ'
import defData from "./myModule.js";
import defData, { str, num, arr, fn } from "./myModule.js";
import { str, num, arr, fn } from "./myModule.js";
import {
  str as myStr,
  num as myNum,
  arr as myArr,
  fn as myFn,
} from "./myModule.js";
import * as myName from "./myModule.js";

*๋Š” ์™€์ด๋“œ์นด๋“œ ๋ฌธ์ž(wildcard character)๋กœ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ํ•œ ๋ฒˆ์— ์ง€์ •ํ•œ๋‹ค๋Š” ์˜๋ฏธ์˜ ๊ธฐํ˜ธ