본문 바로가기

오늘 한 일을 기록하자/TIL

201031_TIL

오늘한 일

  • Javascript Koans 05_Types-part2 ~ 06_Array 복습
  • 07_Object ~ 08_SpreadSyntax 풀기
  • primitive data type(원시 자료형, 원시값) / ex. string, number, bigint, boolean, undefined, symbol
  • Non-primitive data type(기본이 아닌 데이터 유형, 복합 데이터 유형) / ex. Object, Array, function
  • call by value 와 call by reference / deep copy 와 shallow copy 고민해보기

 

오늘 느낀점

  • 원시 자료형은 값 자체에 대한 변경이 불가능(immutable)하다.
  • 원시 자료형은 변수의 크기가 고정되어 있다.
const num1 = 123;
const num2 = 123456789;

// 변수의 값은 num1 < num2 이지만, 두 변수의 크기는 같다.

 

  • 원시 자료형을 변수에 재할당할 경우, 값 자체의 복사가 일어난다.
let overTwenty = true;
let allowedToDrink = overTwenty;

overTwenty = false;

console.log(overTwenty);  // false
console.log(allowedToDrink);  // true

 

  • 자바스크립트에서 primitive data type 이 아닌 자료 데이터 유형은 모두 Object 이다. Object 는 변수의 크디가 동적(dynamic) 으로 변한다. 이 때문에 Object 의 데이터 자체는 별도의 메모리 공간(heap)에 저장된다. 그리고 이 데이터가 위치한 곳(메모리 상 주소)을 가리키는 주소가 변수에 저장된다. 데이터는 별도로 관리되고, 우리가 직접 다루는 변수에는 주소가 저장되기 때문에 reference type 이라고 한다. Object 자료형의 변수는 실제 데이터가 저장된 주소를 가리킨다(refer), 즉 참조(reference) 한다. 따라서 Object 자료형을 변수에 할당할 경우, 값(데이터)의 '주소'가 저장된다.
  • Object 자료형 데이터는 heap에 저장되고, 변수에 할당 할 경우 변수에는 주소가 저장된다.
  • Object 를 함수의 인자(매개변수)로 전달할 경우, reference 로 전달된다(deep copy). / 하지만 Object.assign() 을 통한 복사는 얕은 복사(shallow copy) 이다.
  • toBe()는 주소값을 비교하고, toEqual() 은 데이터 값을 비교한다.
  • ...spread operator(전개 연산자) 는 배열의 원소를 분해해서 개별 요소로 만들어준다.
let arr1 = [1, 2, 3];
let arr2 = [4, 5, 6];
let concatArr = [...arr1, ...arr2];  // arr1.concat(arr2);

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

 

  • Rest Parameter는 인자의 수가 정해져 있지 않은 경우에도 유용하게 사용할 수 있다.
function sum(...nums) {
  let sum = 0;
  for (let i = 0; i < nums.length; i++) {
    sum = sum + nums[i];
  }
  return sum;
}

sum(1, 2, 3);  // 6
sum(1, 2, 3, 4);  // 10

 

  • arguments를 통해 '비슷하게' 함수의 인자들을 다룰 수 있다(spread syntax 도입 이전). arguments는 모든 함수의 실행 시 자동으로 생성되는 '객체'이다. / argumetns와 rest parmeter를 통해 배열로 된 인자(args)의 차이는 rest parmeter는 이터러블하다(Symbol(Symbol.iterator)). rest parmeter는 Array 이고, arguments는 Object 이다.
function getAllParamsObj() {
  return arguments;
}

let argObj = getAllParamsObj(1, 2, 3, 99);
console.log(argObj);  // [1, 2, 3, 99];

 

'오늘 한 일을 기록하자 > TIL' 카테고리의 다른 글

201104_TIL  (0) 2020.11.04
201102_TIL  (0) 2020.11.02
201028_TIL  (0) 2020.10.28
201021_TIL  (0) 2020.10.21
201018_TIL  (0) 2020.10.18