관리 메뉴

Daehyunii's Dev-blog

36μž₯ λ””μŠ€νŠΈλŸ­μ²˜λ§ ν• λ‹Ή λ³Έλ¬Έ

πŸ“š Language & CS knowledge/JavaScript (λͺ¨λ˜μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive)

36μž₯ λ””μŠ€νŠΈλŸ­μ²˜λ§ ν• λ‹Ή

Daehyunii 2022. 7. 28. 13:19

  λ””μŠ€νŠΈλŸ­μ²˜λ§ 할당은 κ΅¬μ‘°ν™”λœ λ°°μ—΄κ³Ό 같은 μ΄ν„°λŸ¬λΈ” λ˜λŠ” 객체λ₯Ό ꡬ쑰 νŒŒκ΄΄ν•˜μ—¬ 1개 μ΄μƒμ˜ λ³€μˆ˜μ— κ°œλ³„μ μœΌλ‘œ ν• λ‹Ήν•˜λŠ” 것을 λ§ν•œλ‹€. λ°°μ—΄κ³Ό 같은 μ΄ν„°λŸ¬λΈ” λ˜λŠ” 객체 λ¦¬ν„°λŸ΄μ—μ„œ ν•„μš”ν•œ κ°’λ§Œ μΆ”μΆœν•˜μ—¬ λ³€μˆ˜μ— ν• λ‹Ήν•  λ•Œ μœ μš©ν•˜λ‹€.

 

36.1 λ°°μ—΄ λ””μŠ€νŠΈλŸ­μ²˜λ§ ν• λ‹Ή

  ES5μ—μ„œ κ΅¬μ‘°ν™”λœ 배열을 λ””μŠ€νŠΈλŸ­μ²˜λ§ν•˜μ—¬ 1개 μ΄μƒμ˜ λ³€μˆ˜μ— ν• λ‹Ήν•˜λŠ” 방법은 λ‹€μŒκ³Ό κ°™λ‹€.

//ES5μ—μ„œ λ””μŠ€νŠΈλŸ­μ²˜λ§ν•˜μ—¬ λ³€μˆ˜μ— ν• λ‹Ή
var arr = [1, 2, 3];

var one = arr[0];
var two = arr[1];
var three = arr[2];

console.log(one, two, three); // 1 2 3

  ES6μ—μ„œμ˜ λ°°μ—΄ λ””μŠ€νŠΈλŸ­μ²˜λ§ 할당은 λ°°μ—΄μ˜ 각 μš”μ†Œλ₯Ό λ°°μ—΄λ‘œλΆ€ν„° μΆ”μΆœν•˜μ—¬ 1개 μ΄μƒμ˜ λ³€μˆ˜μ— ν• λ‹Ήν•œλ‹€. μ΄λ•Œ λ°°μ—΄ λ””μŠ€νŠΈλŸ­μ²˜λ§ ν• λ‹Ήμ˜ λŒ€μƒμ€ μ΄ν„°λŸ¬λΈ”μ΄μ–΄μ•Ό ν•˜λ©°, ν• λ‹Ή 기쀀은 λ°°μ—΄μ˜ μΈλ±μŠ€λ‹€. 즉, μˆœμ„œλŒ€λ‘œ ν• λ‹Ήλœλ‹€.

//ES5μ—μ„œ λ””μŠ€νŠΈλŸ­μ²˜λ§ν•˜μ—¬ λ³€μˆ˜μ— ν• λ‹Ή
var arr = [1, 2, 3];

const[one, two, three] = arr;

console.log(one, two, three); // 1 2 3

  λ°°μ—΄ λ””μŠ€νŠΈλŸ­μ²˜λ§ 할당을 μœ„ν•΄μ„œλŠ” ν• λ‹Ή μ—°μ‚°μž μ™Όμͺ½μ— 값을 할당받을 λ³€μˆ˜λ₯Ό μ„ μ–Έν•΄μ•Ό ν•œλ‹€. μ΄λ•Œ λ³€μˆ˜λ₯Ό λ°°μ—΄ λ¦¬ν„°λŸ΄ ν˜•νƒœλ‘œ μ„ μ–Έν•œλ‹€.

μ΄λ•Œ μš°λ³€μ— μ΄ν„°λŸ¬λΈ”μ„ ν• λ‹Ήν•˜μ§€ μ•ŠμœΌλ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

const[one, two, three]; // SyntaxError λ°œμƒ
const[one1, two2, three3] = {} // TypeError λ°œμƒ

  λ°°μ—΄ λ””μŠ€νŠΈλŸ­μ²˜λ§ ν• λ‹Ήμ˜ 기쀀은 λ°°μ—΄μ˜ μΈλ±μŠ€λ‹€. 즉, μˆœμ„œλŒ€λ‘œ ν• λ‹Ήλœλ‹€. μ΄λ•Œ λ³€μˆ˜μ˜ κ°œμˆ˜μ™€ μ΄ν„°λŸ¬λΈ”μ˜ μš”μ†Œ κ°œμˆ˜κ°€ λ°˜λ“œμ‹œ μΌμΉ˜ν•  ν•„μš”λŠ” μ—†λ‹€.

const[a, b] = [1, 2];
console.log(a, b); // 1 2

const[c, d] = [1];
console.log(c, d); // 1 undefined

const[e, f] = [1, 2, 3];
console.log(e, f); // 1 2

  λ°°μ—΄ λ””μŠ€νŠΈλŸ­μ²˜λ§ 할당을 μœ„ν•œ λ³€μˆ˜μ— 기본값을 μ„€μ •ν•  수 μžˆλ‹€.

// κΈ°λ³Έκ°’
const[a, b, c = 3] = [1, 2];
console.log(a, b, c); // 1 2 3

// 기본값보닀 ν• λ‹Ήλœ 값이 μš°μ„ ν•œλ‹€.
const[e, f = 10, g = 3] = [1, 2];
console.log(e, f, g); // 1 2 3

  λ°°μ—΄ λ””μŠ€νŠΈλŸ­μ²˜λ§ 할당을 μœ„ν•œ λ³€μˆ˜μ— Rest νŒŒλΌλ―Έν„°μ™€ μœ μ‚¬ν•˜κ²Œ Rest μš”μ†Œ ...을 μ‚¬μš©ν•  수 μžˆλ‹€. Rest μš”μ†ŒλŠ” λ°˜λ“œμ‹œ λ§ˆμ§€λ§‰μ— μœ„μΉ˜ν•΄μ•Ό ν•œλ‹€.

const[x, ...y] = [1, 2, 3];
console.log(x, y); // 1 [2, 3]

36.2 객체 λ””μŠ€νŠΈλŸ­μ²˜λ§ ν• λ‹Ή

  ES5μ—μ„œ 객체의 각 ν”„λ‘œνΌν‹°λ₯Ό κ°μ²΄λ‘œλΆ€ν„° λ””μŠ€νŠΈλŸ­μ²˜λ§ν•˜μ—¬ λ³€μˆ˜μ— ν• λ‹Ήν•˜κΈ° μœ„ν•΄μ„œλŠ” ν”„λ‘œνΌν‹° ν‚€λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

var user = { firstName : 'Ungmo', lastName : 'lee' };

var firstName = user.firstName;
var lastName = user.lastName;

console.log(firstName, lastName); // Ungmo lee

  ES6의 객체 λ””μŠ€νŠΈλŸ­μ²˜λ§ 할당은 객체의 각 ν”„λ‘œνΌν‹°λ₯Ό κ°μ²΄λ‘œλΆ€ν„° μΆ”μΆœν•˜μ—¬ 1개 μ΄μƒμ˜ λ³€μˆ˜μ— ν• λ‹Ήν•œλ‹€. μ΄λ•Œ 객체 λ””μŠ€νŠΈλŸ­μ²˜λ§ ν• λ‹Ήμ˜ λŒ€μƒμ€ 객체이어야 ν•˜λ©°, ν• λ‹Ή 기쀀은 ν”„λ‘œνΌν‹° ν‚€λ‹€. 즉, μˆœμ„œλŠ” μ˜λ―Έκ°€ μ—†μœΌλ©° μ„ μ–Έλœ λ³€μˆ˜ 이름과 ν”„λ‘œνΌν‹° ν‚€κ°€ μΌμΉ˜ν•˜λ©΄ ν• λ‹Ήλœλ‹€. 

var user = { firstName : 'Ungmo', lastName : 'lee' };

const {firstName,lastName} = user;

console.log(firstName, lastName); // Ungmo lee

  객체 λ””μŠ€νŠΈλŸ­μ²˜λ§ 할당을 μœ„ν•΄μ„œλŠ” ν• λ‹Ή μ—°μ‚¬μž μ™Όμͺ½μ— ν”„λ‘œνΌν‹° 값을 할당받을 λ³€μˆ˜λ₯Ό μ„ μ–Έν•΄μ•Ό ν•œλ‹€. μ΄λ•Œ λ³€μˆ˜λ₯Ό 객체 λ¦¬ν„°λŸ΄ ν˜•νƒœλ‘œ μ„ μ–Έν•œλ‹€. μ΄λ•Œ μš°λ³€μ— 객체 λ˜λŠ” 객체둜 평가될 수 μžˆλŠ” ν‘œν˜„μ‹μ„ ν• λ‹Ήν•˜μ§€ μ•ŠμœΌλ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

const {firstName,lastName} // SyntaxError λ°œμƒ

const {firstName2,lastName2} = null; // TypeError λ°œμƒ

  객체의 ν”„λ‘œνΌν‹° 킀와 λ‹€λ₯Έ λ³€μˆ˜ μ΄λ¦„μœΌλ‘œ ν”„λ‘œνΌν‹° 값을 ν• λ‹Ήλ°›μœΌλ €λ©΄ 콜둠(:)을 μ‚¬μš©ν•΄ λ³€μˆ˜λ₯Ό μ„ μ–Έν•œλ‹€.

const user = { firstName : 'Ungmo', lastName : 'lee' };

const {firstName : foo,lastName : bar} = user;

console.log(foo, bar); // Ungmo lee

  객체 λ””μŠ€νŠΈλŸ­μ²˜λ§ 할당을 μœ„ν•œ λ³€μˆ˜μ— 기본값을 μ„€μ •ν•  수 μžˆλ‹€.

const {firstName : foo = 'Ungmo', lastName : bar} = {lastName : 'lee'}

console.log(foo, bar); // Ungmo lee

  객체 λ””μŠ€νŠΈλŸ­μ²˜λ§ 할당은 κ°μ²΄μ—μ„œ ν”„λ‘œνΌν‹° ν‚€λ‘œ ν•„μš”ν•œ ν”„λ‘œνΌν‹° κ°’λ§Œ μΆ”μΆœν•˜μ—¬ λ³€μˆ˜μ— ν• λ‹Ήν•˜κ³  싢을 λ•Œ μœ μš©ν•˜λ‹€. λ˜ν•œ 객체 λ””μŠ€νŠΈλŸ­μ²˜λ§ 할당을 μœ„ν•œ λ³€μˆ˜μ— Rest νŒŒλΌλ―Έν„°λ‚˜ Rest μš”μ†Œμ™€ μœ μ‚¬ν•˜κ²Œ Rest ν”„λ‘œνΌν‹° ...을 μ‚¬μš©ν•  수 μžˆλ‹€. Rest ν”„λ‘œνΌν‹°λŠ” λ°˜λ“œμ‹œ λ§ˆμ§€λ§‰μ— μœ„μΉ˜ν•΄μ•Ό ν•œλ‹€.

const { x, ...rest } = { x : 1, y : 2, z : 3 };
console.log(x, rest); // {y: 2, z: 3}