๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“• STUDY/Node.js

[Node.js๋กœ ์„œ๋ฒ„๋งŒ๋“ค๊ธฐ] 2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•(๊ฐ์ฒด/๋ฐฐ์—ด/ํ•จ์ˆ˜)

โœ… ๊ฐ์ฒด

1. ๊ฐ์ฒด๋ž€?

์šฐ๋ฆฌ๊ฐ€ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜๋‚˜์˜ ์นดํ…Œ๊ณ ๋ฆฌ

ex) ๊ฐ์ฒด - ๋‚˜๋ผ
'๋‚˜๋ผ'๋ผ๋Š” '๊ฐ์ฒด'๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํŠน์ง•์€
์ด๋ฆ„, ํฌ๊ธฐ, ์ธ๊ตฌ ์ˆ˜ ๋“ฑ์ด ์žˆ์Œ

 

2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ์˜ ๊ฐ์ฒด๋ž€?

ํ‚ค(key)์™€ ๊ฐ’(value)์˜ ์Œ์œผ๋กœ ์ด๋ค„์ง„ ํ”„๋กœํผํ‹ฐ(property)์˜ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ์ง‘ํ•ฉ

ex) ๊ฐ์ฒด - ๋‚˜๋ผ
'๋‚˜๋ผ'๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํŠน์ง• = 'ํ”„๋กœํผํ‹ฐ'
์ด๋ฅผ ํ‚ค - ๊ฐ’ ์Œ์œผ๋กœ ๋งคํ•‘ํ•˜์—ฌ ์ €์žฅ
// sample07
const country = {
    name: 'Korea',
    population: '5178579',
    get_name: function(){
        return this.name;
    }
};
console.log(
    country.name,
    country.population,
    country.get_name()
    );
// Korea 5178579 Korea

 

1) ํ”„๋กœํผํ‹ฐ : ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ ํŠน์ง•, ์ •๋ณด

key value
name Korea
population 5178579

โžก ๊ฐ์ฒด๋Š” ํ”„๋กœํผํ‹ฐ ๋ง๊ณ ๋„ ํ–‰์œ„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์ด์Œ.

 

2) ๋ฉ”์„œ๋“œ : ๊ฐ์ฒด ์•ˆ์˜ ํ•จ์ˆ˜

get_name: function(){
        return this.name;
    }

โœ… ๋ฐฐ์—ด

๋ฐฐ์—ด์ด๋ž€?

[์š”์†Œ 1, ์š”์†Œ 2,,,] ๋ฅผ ํ†ตํ•ด์„œ ์ƒ์„ฑํ•˜์—ฌ ์ˆซ์ž, ๋ฌธ์ž์—ด, ๊ฐ์ฒด ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฒƒ๋“ค์„ ์š”์†Œ๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ.

 

1. ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

: ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์„ ๋ณ€์ˆ˜๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ '๋ถ„ํ•ด'ํ•ด์ฃผ๋Š” ๋ฌธ๋ฒ•

// sample09
const animal = ['dog', 'cat', 'monkey'];
let [first, second] = animal;

console.log(first); // dog
console.log(second); // cat

 

2. ๋ฐฐ์—ด ๋‚ด์žฅ ํ•จ์ˆ˜

1) push() : ๋ฐฐ์—ด์˜ ๋์— ์š”์†Œ ์ถ”๊ฐ€

- ๋ฐฐ์—ด.push(์š”์†Œ)

- ์š”์†Œ๋Š” ๊ฐ์ฒด, ์ˆซ์ž, ๋ฌธ์ž์—ด ๋“ฑ ์–ด๋–ค ๊ฒƒ์ด๋“  ๊ฐ€๋Šฅํ•จ!

// sample 08
const coffee = [];

coffee.push({name: 'Americano'});
coffee.push({name: 'Latte'});

console.log(
    coffee, // [ { name: 'Americano' }, { name: 'Latte' } ]
    coffee[0],// { name: 'Americano' }
    coffee.length // 2
    );

 

2) pop() : ๋ฐฐ์—ด์˜ ๋์— ์š”์†Œ ์‚ญ์ œ

- ๋ฐฐ์—ด.pop()

const alpha = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

alpha.pop();
console.log(alpha);
// [0, 1, 2, 3, 4, 5, 6, 7, 8 ]

 

3) forEach() : for๋ฌธ์„ ์งง๊ฒŒ ์ค„์ž„

- ํ•จ์ˆ˜๋ฅผ ์ธ์ˆ˜๋กœ ๋ฐ›์Œ

- ํ•จ์ˆ˜์—๋Š” ์„ธ ๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Œ

[1 - item] ํ•ด๋‹น ์š”์†Œ [2 - index] : ์ธ๋ฑ์Šค  [3 - arr] : ํ•ด๋‹น ๋ฐฐ์—ด (๋ณดํ†ต 3๋ฒˆ์งธ๋Š” ์ƒ๋žตํ•จ) 
let arr = ["Mike", "Jane", "Tom"];
arr.forEach((name, idx) => {
  console.log(name); // Mike Jane Tom
  console.log(`${name}'s number is ${idx}`);
});

// ์ถœ๋ ฅ๊ฒฐ๊ณผ
/*
  Mike's number is 0 
  Jane's number is 1
  Tom's number is 2 
  */

 

4) indexOf() : ์›์†Œ์˜ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜

- ๋ฐฐ์—ด.indexOf(์ˆซ์ž) : ์ˆซ์ž๊ฐ€ ๋ฐฐ์—ด ์•ˆ์— ์žˆ์œผ๋ฉด ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜ (์—†์œผ๋ฉด -1 ๋ฐ˜ํ™˜)

- ๋ฐฐ์—ด.indexOf(a, b) : ์ธ๋ฑ์Šค b๋ถ€ํ„ฐ ์‚ดํŽด๋ณด์•˜์„ ๋•Œ, a๊ฐ€ ์žˆ์œผ๋ฉด ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜ (์—†์œผ๋ฉด -1 ๋ฐ˜ํ™˜)

๋ฐฐ์—ด.lastIndexOf(์ˆซ์ž) : ์ˆซ์ž๋ฅผ ๋’ค์—์„œ๋ถ€ํ„ฐ ์ฐพ๊ธฐ ์‹œ์ž‘ํ•จ.
let arr = [1,2,3,4,5,1,2,3];
console.log(
  arr.indexOf(3), //2
  arr.indexOf(3, 3), // 7
  arr.lastIndexOf(2), // 6
  arr.indexOf(6) // -1
)

 

5) find(fn) : ์ฐพ์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์คŒ

- ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Œ

- ๋ฐฐ์—ด ์•ˆ์— ์žˆ์œผ๋ฉด ์ฒซ๋ฒˆ์งธ true ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•จ (์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์–ด๋„ ์ฒซ๋ฒˆ์งธ๋งŒ!)

- ์—†์œผ๋ฉด undefined ๋ฐ˜ํ™˜ ๐ŸŒŸ๐ŸŒŸ

/* ex 1 */
let arr = [1, 2, 3, 4, 5];
const result = arr.find((item) => {
  return item % 3 === 0;
});

console.log(result); // 3
/* ex 2 */
let arr = [1, 2, 3, 4, 5];
const result = arr.find((item) => {
  return item % 6 === 0;
});

console.log(result); // undefined
findIndex() :  ๋ฐฐ์—ด ์•ˆ์— ์žˆ์œผ๋ฉด ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜
์—†์œผ๋ฉด -1 ๋ฐ˜ํ™˜
/* ex3 */
let userList = [
  { name: "Mike", age: 30 },
  { name: "Jane", age: 22 },
  { name: "Tom", age: 17 }
];

const teen = userList.find((user) => {
  if (user.age < 19) {
    return true;
  }
  return false;
});

const teen2 = userList.findIndex((user) => {
  if (user.age < 19) {
    return true;
  }
  return false;
});

console.log(teen); // {name: "Tom", age: 17}
console.log(teen2); // 2

 

6) filter() : ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐฐ์—ด ์ƒ์„ฑ

- ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•จ.

find()๋Š” ๋งŒ์กฑํ•˜๋Š” ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋งŒ!
filter()๋Š” ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ!
let arr = [1,2,3,4,5,6,7,8,9,10]
const filter_result = arr.filter((item)=>{
  if(!(item%2)) return true;
  return false;
});

const find_result = arr.find((item) => {
	if(!(item%2)) return true;
    return false;
});
    
console.log(filter_result); // [2, 4, 6, 8, 10]
console.log(find_result); // 2

 

7) join() : ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์นจ

- ๋ฐฐ์—ด.join('๋ฌธ์ž')

- '๋ฌธ์ž'๊ฐ€ ์—†์œผ๋ฉด ',' ๋ฌธ์ž๋กœ ๊ตฌ๋ถ„์ง€์–ด ํ•ฉ์นจ.

- '๋ฌธ์ž'๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ๋ฌธ์ž๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•ฉ์นจ

let arr = ["๋‚˜๋Š”", "์ดํ˜„์ง„", "์ž…๋‹ˆ๋‹ค."];
console.log(
  arr.join(), // ๋‚˜๋Š”,์ดํ˜„์ง„,์ž…๋‹ˆ๋‹ค.
  arr.join(" "), // ๋‚˜๋Š” ์ดํ˜„์ง„ ์ž…๋‹ˆ๋‹ค.
  arr.join("_") // ๋‚˜๋Š”_์ดํ˜„์ง„_์ž…๋‹ˆ๋‹ค.
);
<-> ๋ฐฐ์—ด.split('๋ฌธ์ž') : '๋ฌธ์ž'๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ ์คŒ
('๋ฌธ์ž'๊ฐ€ ์—†์œผ๋ฉด ํ•˜๋‚˜์”ฉ ๋‚˜๋ˆ ์คŒ)
let users = "Mike,Jane,Lucas,Will,Max,Dustin";
const result = users.split(",");
console.log(result); //["Mike", "Jane", "Lucas", "Will", "Max", "Dustin"]

let hello = "hello";
console.log(hello.split("")); // ["h", "e", "l", "l", "o"]

 

8) map() : ๋ฐฐ์—ด ๊ฐ ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜

- ํ•จ์ˆ˜๋ฅผ ๋ฐ›์•„ ํŠน์ • ๊ธฐ๋Šฅ์„ ์‹œํ–‰ํ•˜๊ณ , ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•จ

let userList = [
    { name: "Jane", age: 30 },
    { name: "Lee", age: 22 },
    { name: "Eom", age: 26 }
  ];
  
  let newUser = userList.map((user, idx) => {
    return Object.assign({}, user, {
      id: idx + 1,
      isAdult: user.age > 25
    });
  });
  
  console.log(userList);
  /*
  0: {name: 'Jane', age: 30}
  1: {name: 'Lee', age: 22}
  2: {name: 'Eom', age: 26}
  length: 3
  */
  
  console.log(newUser);
  /*
  0: {name: 'Jane', age: 30, id: 1, isAdult: true}
  1: {name: 'Lee', age: 22, id: 2, isAdult: false}
  2: {name: 'Eom', age: 26, id: 3, isAdult: true}
  length: 3
  */

 

 

9) splice() : ์ธ๋ฑ์Šค๋กœ ํŠน์ • ํ•ญ๋ชฉ ์ œ๊ฑฐ

- splice(n, m) : ์ธ๋ฑ์Šค n๋ถ€ํ„ฐ m๊ฐœ๋ฅผ ์ง€์›€

let arr = [1,2,3,4,5];
arr.splice(1,2);

console.log(arr); // [1,4,5]

 

- splice(n, m, x) : ์ธ๋ฑ์Šค n๋ถ€ํ„ฐ m๊ฐœ๋ฅผ ์ง€์šฐ๊ณ , x๋กœ ์ฑ„์›€

let arr = [1,2,3,4,5];
arr.splice(1,3,200,300);

console.log(arr); // [1, 200, 300, 5]

 

- splice(n, 0, x) : ์š”์†Œ๋ฅผ ์ง€์šฐ์ง€ ์•Š๊ณ , ์›ํ•˜๋Š” ๊ณณ์— ์š”์†Œ ์ถ”๊ฐ€

let arr = ["๋‚˜๋Š”", "์ดํ˜„์ง„", "์ž…๋‹ˆ๋‹ค."];
arr.splice(1, 0, "๋Œ€ํ•œ๋ฏผ๊ตญ", "๋Œ€ํ•™์ƒ");

console.log(arr); // ['๋‚˜๋Š”', '๋Œ€ํ•œ๋ฏผ๊ตญ', '๋Œ€ํ•™์ƒ', '์ดํ˜„์ง„', '์ž…๋‹ˆ๋‹ค.']

 

- ์‚ญ์ œ๋œ ์š”์†Œ ๋ฐ˜ํ™˜

let arr = [1, 2, 3, 4, 5];
let result = arr.splice(2, 2);

console.log(
  arr, // [1, 2, 5]
  result // [3, 4]
);

 

10) slice() : ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•˜์—ฌ ์ƒˆ ๋ฐฐ์—ด ์ƒ์„ฑ

- slice(n, m) : ์ธ๋ฑ์Šค n ~ m-1๊นŒ์ง€ ๋ฐ˜ํ™˜

let arr = [1,2,3,4,5];
console.log(arr.slice(1,4)); // [2, 3, 4]

 

11) concat : ๋ฐฐ์—ด์„ ํ•ฉ์ณ์„œ ์ƒˆ ๋ฐฐ์—ด ์ƒ์„ฑ

- concat(arr1, arr2,,,,)

let arr1 = [1, 2, 3];
let arr2 = arr1.concat([4]);
let arr3 = arr2.concat([5, 6], [7, 8]);

console.log(
  arr1, //[1, 2, 3]
  arr2, //[1, 2, 3, 4]
  arr3 //[1, 2, 3, 4, 5, 6, 7, 8]
);

 

12) reduce() : ๋ˆ„์  ๊ฐ’ ๊ณ„์‚ฐ

- reduce(ํ•จ์ˆ˜, ์ดˆ๊ธฐ ๊ฐ’)

prev : ๋ˆ„์  ๊ณ„์‚ฐ ๊ฐ’ / cur : ํ˜„์žฌ ๊ฐ’ / return ๊ณ„์‚ฐ ๊ฐ’
let userList = [
    { name: "Mike", age: 10 },
    { name: "Lucas", age: 9 },
    { name: "Jane", age: 11 },
    { name: "Will", age: 8 },
    { name: "Dustin", age: 12 },
    { name: "Max", age: 13 }
  ];
  
  let result = userList.reduce((prev, cur) => {
    if (cur.age > 10) {
      prev.push(cur.name);
    }
    return prev;
  }, []);
  
  console.log(result); // ["Jane", "Dustin", "Max"]

 

ex) ํ•ฉ๊ณ„ ๊ตฌํ•˜๊ธฐ (reduce ๋ฏธ์‚ฌ์šฉ)

/* ํ•ฉ๊ณ„ ๊ตฌํ•˜๊ธฐ */
// ๋ฐฉ๋ฒ• 1 - for ๋ฐ˜๋ณต๋ฌธ
let result = 0;
for(let i = 0; i<arr.length; i++){
  result += arr[i];
}
console.log(result); // 15

// ๋ฐฉ๋ฒ• 2 - for..in ๋ฐ˜๋ณต๋ฌธ
let result = 0;
for(let i in arr){
  result += arr[i];
}
console.log(result); // 15

// ๋ฐฉ๋ฒ• 3 - for of
let result = 0;
for(let i of arr){
  result += i;
}
console.log(result); // 15

// ๋ฐฉ๋ฒ• 4 - forEach()
let result = 0;
arr.forEach((i) => {
  result += i;
})
console.log(result); // 15

 

ex) reduce๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ฉ๊ณ„ ๊ตฌํ•˜๊ธฐ

// ex 1
let arr = [1,2,3,4,5];

const sum = arr.reduce((prev, cur) => {
  return prev + cur;
}, 0);

console.log(sum); // 15

 

13) includes() : ํฌํ•จํ•˜๋Š”์ง€ ํ™•์ธ

- ํฌํ•จํ•˜๋ฉด true ๋ฐ˜ํ™˜

- ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฉด false ๋ฐ˜ํ™˜

let arr = [1,2,3];

console.log(
  arr.includes(2), // true
  arr.includes(8), // false
);

 

14) Array.isArray() : ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด ๊ตฌ๋ถ„

๐Ÿ“› ์ฃผ์˜!
typeof()๋กœ ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด๋ฅผ ํŒ๋ณ„ํ•˜๋ฉด ๋‘˜ ๋‹ค ๋ฐฐ์—ด์ด ๋‚˜์˜ด

- Array.isArray(๋ฐฐ์—ด)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‘˜์˜ ๊ตฌ๋ถ„์ด ๊ฐ€๋Šฅํ•จ

let user = {
    name: "Lee",
    age: 22
  };
  
  let users = ["Lee", "Kim", "Woo"];
  
  console.log(
    typeof user, // object
    typeof users, // object
  
    Array.isArray(user), // false
    Array.isArray(users) // true
  );

 

15) sort() : ๋ฐฐ์—ด ์žฌ์ •๋ ฌ

- ์ƒˆ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฐฐ์—ด ์ž์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋‹ˆ ์ฃผ์˜ํ•ด์•ผํ•จ! ๐Ÿ’ฅ๐Ÿ’ฅ๐Ÿ’ฅ

- ์ธ์ˆ˜๋กœ ์ •๋ ฌ ๋กœ์ง์„ ๋‹ด์€ ํ•จ์ˆ˜๋ฅผ ๋ฐ›์Œ

let arr = [1,5,2,4,3];
let arr2 = [13, 21, 5, 44]
console.log(
  arr.sort(), // [1, 2, 3, 4, 5]
  arr2.sort(), // [13, 21, 44, 5]
  );
๐Ÿ“› ์ฃผ์˜!
sort()๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ๋ฌธ์ž๋กœ ์ƒ๊ฐํ•˜๊ณ  ์ •๋ ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—
13๊ณผ 5๋ฅผ ๋น„๊ตํ•  ๋•Œ '1' vs '5'๋ฅผ ๋น„๊ตํ•˜์—ฌ 13์ด ์•ž ์ˆœ์„œ๋กœ ๋‚˜์˜ค๊ฒŒ ๋จ.

 

โžก ํ•ด๊ฒฐ์ฑ…

let arr2 = [13, 21, 5, 44];
console.log(
  arr2.sort((a,b)=>{
    return a-b;
  }) // [5, 13, 21, 44]
);

 

16) reverse() : ์—ญ์ˆœ ์žฌ์ •๋ ฌ

- ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋Œ“๊ธ€์„ ์ž‘์„ฑํ•œ ์‚ฌ๋žŒ, ๋ฐฉ๋ฌธํ•œ ์‚ฌ๋žŒ ๋“ฑ์„ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉ

let arr = [1,2,3,4,5];
arr.reverse();

console.log(arr); // [5, 4, 3, 2, 1]

โœ… ํ•จ์ˆ˜

1. ํ•จ์ˆ˜ ์„ ์–ธ

1) function์„ ํ†ตํ•ด ์„ ์–ธ

2) () ์•ˆ์— ํŒŒ๋ผ๋ฏธํ„ฐ ์ง€์ •

3) {}๋ฌธ ์•ˆ์— ๋กœ์ง ์ž‘์„ฑ

4) return์„ ํ†ตํ•ด ๋ฐ˜ํ™˜ ๊ฐ’ ์ €์žฅ

// sample10
function add(a, b){
    return a+b;
}

console.log(add(1,4)); // 5

 

2. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

(ES6๋ถ€ํ„ฐ ๋„์ž…๋œ ํ™”์‚ดํ‘œ(Arrow) ํ•จ์ˆ˜, ๋žŒ๋‹ค์‹)

function ๋Œ€์‹  => ๋ฅผ ํ†ตํ•ด ์„ ์–ธ ๊ฐ€๋Šฅ

const add = (a, b) =>{
    return a + b;
}
console.log(add(1,2)); // 3

 

๋งŒ์•ฝ ํ•จ์ˆ˜ ์•ˆ์— return ๋ฐ–์— ์—†๋‹ค๋ฉด?

const add = (a,b) => a+b;

{ }์™€ return ์ƒ๋žต ๊ฐ€๋Šฅ

 

3. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ํŠน์ง•
: ํ•จ์ˆ˜๋ช… / arguments / this  ๊ฐ€ ์—†์Œ

 

[ํ•จ์ˆ˜๋ช…]

ํ•จ์ˆ˜๋ช…์ด ์—†์Œ โžก ์ต๋ช… ํ•จ์ˆ˜๋กœ ๋™์ž‘ํ•œ๋‹ค๋Š” ๋œป

 

[arguments]

1) ๋ณดํ†ต ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด?

์ž์‹ ์˜ ์Šค์ฝ”ํ”„ ์•ˆ์— ์ž๊ธฐ ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” this์™€ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋‹ด๊ธฐ๋Š” arguments๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋จ

const func = function(){
	console.log(arguments)
};

func(1,2,3,4); // Arguments(4) [1, 2, 3, 4]
* ํŒŒ๋ผ๋ฏธํ„ฐ : ๋งค๊ฐœ๋ณ€์ˆ˜

 

2) ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ๋Š”?

- ์ž๋™์œผ๋กœ arguments๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์Œ

const func = () =>{console.log(args)};
func(1,2,3);
// ERROR ๋ฐœ์ƒ
/*
VM381:1 Uncaught ReferenceError: args is not defined
    at func (<anonymous>:1:32)
    at <anonymous>:1:1
*/

 

- ํ•„์š”ํ•˜๋‹ค๋ฉด ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ถ€๋ถ„์— ...args๋ฅผ ๋„ฃ์–ด args๋ผ๋Š” ๋ฐฐ์—ด ์•ˆ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ์Œ.

const func = (...args) =>{console.log(args)};
func(1,2,3); // [1, 2, 3]
๐Ÿ’ก ์ฐธ๊ณ ์‚ฌํ•ญ ๐Ÿ’ก
... : ์ „๊ฐœ ์—ฐ์‚ฐ์ž
๊ฐ’์ด ๋ช‡ ๊ฐœ๊ฐ€ ๋ ์ง€ ๋ชจ๋ฅด๋‚˜ ๋’ค์— ์˜ค๋Š” ๋ณ€์ˆ˜๋ช…์— ๊ฐ’์„ ๋ฐฐ์—ด๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ.

 

[this]

1) console.log(this); ๋ฅผ ์ฐ์–ด๋ณด๋ฉด ๊ฒฐ๊ณผ๋กœ Window ๊ฐ์ฒด๊ฐ€ ๋‚˜์˜ด.

console.log(this);
// Window {0: Window, window: Window, self: Window, document: document, name: '', location: Location, …}

์ด์œ ๋Š”?

console.log(this)๋ฅผ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๋Š” ์ „์—ญ์ด๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ Global์€ Window ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ!

 

2) this์˜ ์‚ฌ์šฉ

// sample12
var people = {
    name: 'gildong',
    say(){
        console.log(this);
    }
};

people.say();

var sayPeople = people.say;
sayPeople();

// ์ถœ๋ ฅ๊ฒฐ๊ณผ
/*
{ name: 'gildong', say: [Function: say] }
<ref *1> Object [global] {
  global: [Circular *1],
  clearInterval: [Function: clearInterval],
  clearTimeout: [Function: clearTimeout],
  setInterval: [Function: setInterval],
  setTimeout: [Function: setTimeout] {
    [Symbol(nodejs.util.promisify.custom)]: [Getter]
  },
  queueMicrotask: [Function: queueMicrotask],
  performance: Performance {
    nodeTiming: PerformanceNodeTiming {
      name: 'node',
      entryType: 'node',
      startTime: 0,
      duration: 32.825800001621246,
      nodeStart: 0.4677000045776367,
      v8Start: 2.4589000046253204,
      bootstrapComplete: 22.77639999985695,
      environment: 11.898200005292892,
      loopStart: -1,
      loopExit: -1,
      idleTime: 0
    },
    timeOrigin: 1660719347749.774
  },
  clearImmediate: [Function: clearImmediate],
  setImmediate: [Function: setImmediate] {
    [Symbol(nodejs.util.promisify.custom)]: [Getter]
  }
}

- people.say() ์—์„œ๋Š” people ๊ฐ์ฒด๊ฐ€ say()๋ฅผ ํ˜ธ์ถœํ•จ โžก this๋Š” people ๊ฐ์ฒด

- sayPeople ๋ณ€์ˆ˜์— people.say๋ฅผ ๋„ฃ๊ณ  ํ˜ธ์ถœํ•จ โžก ์ „์—ญ๋ณ€์ˆ˜๊ฐ€ ํ˜ธ์ถœํ•œ ์ฃผ์ฒด๊ฐ€ ๋˜๋ฏ€๋กœ this๋Š” ์ „์—ญ ๊ฐ์ฒด

 

3) this ๊ฐ์ฒด๋ฅผ ๊ณ ์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?

bind(this๋กœ ๊ณ ์ •์‹œํ‚ฌ ๊ฐ์ฒด) ํ•จ์ˆ˜ ์ด์šฉ
let people = {
    name: 'gildong',
    say(){
        console.log(this);
    }
};

people.say();

let sayPeople = people.say.bind(people);
sayPeople();

// ์ถœ๋ ฅ๊ฒฐ๊ณผ
/*
{ name: 'gildong', say: [Function: say] }
{ name: 'gildong', say: [Function: say] }
*/

โžก ๊ทธ๋Ÿฌ๋‚˜ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด ๊ฒฝ์šฐ this๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— bind๋ฅผ ์‚ฌ์šฉํ•ด๋„ this๋ฅผ ์ฃผ์ž…ํ•  ์ˆ˜ ์—†์Œ.

 

4) this๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์˜ ์˜๋ฏธ๋Š”?
ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด์— this๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด,
์ผ๋ฐ˜์ ์ธ ์ธ์ž๋‚˜ ๋ณ€์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
๋‚ด๋ถ€ ์Šค์ฝ”ํ”„์— this๊ฐ€ ์—†๊ณ  ์ƒ์œ„ ํ•จ์ˆ˜์˜ this๋‚˜ ์ „์—ญ๊ฐ์ฒด์˜ this๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋จ.

๐Ÿ’ฅ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜์ž๋ฉด?

๊ฐ์ฒด ์•ˆ ๋ฉ”์†Œ๋“œ์˜ this = ๊ทธ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋‹ด๊ธด ๊ฐ์ฒด
ํ•จ์ˆ˜ ์•ˆ์˜ this = ์ „์—ญ ๊ฐ์ฒด