primitive data type, reference data type

원시자료형을 변수에 할당할 경우, 값 자체의 복제

let name = "DK";
let newname = name;

console.log(newname); // 'DK'

name = "DOKY";

console.log(name);
console.log(newname);

원시 자료형의 데이터를 함수의 전달인자로 전달할 경우, 값 자체의 복제

let curYear = 2020;
function afterTenYears(year) {
  year = year + 10;
  console.log(year); // 2030
  return year;
}
afterTenYears(curYear);
console.log(afterTenYears(curYear)); // 2030
console.log(curYear); // 2020;
let curYear = 2020;
function afterTenYears(year) {
  year = year + 10;
  return year;
}
let afTenYe = afterTenYears(curYear);
console.log(afTenYe); // 2030

참조 자료형을 변수에 할당할 경우, 데이터의 주소가 저장

const username = ["DK", "SB", "JS"];
let friend = username;

username.push("IG");
console.log(friend); // ['DK', 'SB', 'JS', 'IG']

array

slice

const arr = ["peanut", "butter", "and", "jelly"];

console.log(arr.slice(1)); // (['butter', 'and', 'jelly']);
console.log(arr.slice(0, 1)); // (['peanut']);
console.log(arr.slice(0, 2)); // (['peanut', 'butter']);
console.log(arr.slice(2, 2)); // ([]);
console.log(arr.slice(2, 20)); // (['and', 'jelly']);
console.log(arr.slice(3, 0)); // ([]);
console.log(arr.slice(3, 100)); // (['jelly']);
console.log(arr.slice(5, 1)); // ([]);
console.log(arr.slice(0)); // (['peanut', 'butter', 'and', 'jelly']);

object

property

const obj = {};
console.log(obj.length); // undefined
const user = { name: "DK" };
console.log(name in user); // false
console.log("name" in user); // true
console.log(user.name); // 'DK'
console.log(user["name"]); // 'DK'

this

const curYear = new Date().getFullYear();
const megalomaniac = {
  birthYear: 1970,
  calcAge: function (curYear) {
    return curYear - this.birthYear;
  },
  changeYear: function (newYear) {
    this.birthYear = newYear;
  },
};

console.log(curYear); // 2022
console.log(megalomaniac.calcAge(curYear)); // 52

megalomaniac.birthYear = 2000;
console.log(megalomaniac.calcAge(curYear)); // 22;

megalomaniac.changeYear(2010);
console.log(megalomaniac.calcAge(curYear)); // 12

얕은 복사(shallow copy) 깊은 복사(deep copy)

obj = { a: 2, b: { C: 5 } };
arr = [1, 2, 3, [4]];

let slice = arr.slice();
assign = Object.assign({}, obj);
spreadArr = [...arr];
spreadObj = { ...obj };

console.log(slice === arr); // false
console.log(slice[3] === arr[3]); // true...
console.log(spreadObj.b === obj.b); /// true...

객체 안에 객체, 배열 안에 배열이 있는 경우 얕은 복사가 일어난다.

카테고리:

태그:

업데이트:

댓글남기기