2.1) Truthy와 Falsy

image.png

image.png

// 1. Falsy한 값
let f1 = undefined;
let f2 = null;
let f3 = 0;
let f4 = -0;
let f5 = NaN;
let f6 = "";
let f7 = 0n;

// 2. Truthy 한 값
// -> 7가지 Falsy 한 값들 제외한 나머지 모든 값
let t1 = "hello";
let t2 = 123;
let t3 = [];
let t4 = {};
let t5 = () => {};

// 3. 활용 사례
function printName(person) {
  if (!person) {
    console.log("person의 값이 없음");
    return;
  }
  console.log(person.name);
}

let person = { name: "이정환" };
printName(person);

2.2) 단락평가

image.png

function returnFalse() {
    console.log("False 함수")
    return false;
}
function returnTrue() {
    console.log("True 함수")
    return true;
}

function returnFalsy() {
    console.log("Falsy 함수")
    return undefined;
}
function returnTruthy() {
    console.log("Truthy 함수")
    return 10;
}

console.log(returnFalse() && returnTrue()); // "False 함수" false;
console.log(returnFalsy() && returnTruthy()); // "Falsy 함수" undefined;

// 단락 평가 활용 사례

function printName(person){
    // 방법 1
    // if(!person) {
    //     console.log("person에 값이 없음");
    //     return;
    // }
    // console.log(person.name);

    // 방법 2
    // console.log(person && person.name);

    // 방법 3
    const name = person && person.name;
    console.log(name || "person의 값이 없음")
}

printName();
printName({ name: "이정환" });

2.3) 구조분해할당

// 1. 배열의 구조 분해 할당
let arr = [1, 2, 3];

// 방식 1
// let one = arr[0];
// let two = arr[1];
// let three = arr[2];

let [one, two, three, four = 4] = arr;
// console.log(one, two, three, four);

// 2. 객체의 구조 분해 할당
let person = {
    name: "이정환",
    age: 27,
    hobby: "테니스",
  };
  
  let {
    age: myAge,
    hobby,
    name,
    extra = "hello",
  } = person;
  
  // 3. 객체 구조 분해 할당을 이용해서 함수의 매개변수를 받는 방법
  const func = ({ name, age, hobby, extra }) => {
    console.log(name, age, hobby, extra);
  };
  
  func(person);

2.4) Spread 연산자와 Rest 매개변수

// 1. Spread 연산자
// -> Spread : 흩뿌리다, 펼치다 라는 뜻
// -> 객체나 배열에 저장된 여러개의 값을 개별로 흩뿌려주는 역할

let arr1 = [1, 2, 3];
// let arr2 = [4, arr1[0], arr1[1], arr1[2], 5, 6];
let arr2 = [4, ...arr1, 5, 6];

let obj1 = {
    a: 1,
    b: 2,
};
let obj2 = {
    ...obj1,
    c: 3,
    d: 4,
};

function funcA(p1, p2, p3) {
    // console.log(p1, p2, p3);
}

funcA(...arr1);

// 2. Rest 매개변수
// -> Rest는 나머지, 나머지 매개변수

// 2. Rest 매개변수
// -> Rest는 나머지 , 나머지 매개변수

function funcB(one, two, ...ds) {
    console.log(ds);
  }
  
  funcB(...arr1);

2.5) 원시타입 VS 객체타입

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png