2021-08-07 TIL

til  · 6 mins read

Facts

  • 그룹바이 출근
  • node.js의 이벤트 루프에 대해 학습하였다.
  • javascript 얕은 복사, 깊은 복사에 대해 학습하였다.

Feelings

  • 이번주 부캠 활동에 대한 회고
    • 이번주는 미션이 대체적으로 흥미로웠지만 코딩을 끝까지 계속 붙잡고 있어서 그런지 학습할 시간이 많이 부족했다. 일주일 후면 챌린지가 끝나는데 벌써 아쉽다. 더 열심히 하고 더 효율적으로 학습했으면 좋았을걸.. 그래도 챌린지 기간동안 새로운 개념을 많이 배웠고, 효율적으로 코딩하는 방법도 배워서 기분이 좋다. 미션을 하면서는 힘들다는 생각밖에 안 들었는데 이번주 주말에는 부캠 활동이 꽤 재밌는 것 같다는 생각이 든다. 과연 다음주에도 그렇게 느낄 것인가.. 다음주에는 챌린지 마지막 주인만큼 최대한 다 쏟아내서 많이 배우고 즐겨야 겠다.
  • 이번주에 부캠 활동을 하면서 미뤄놓은 학습을 주말에 하였는데 이해가 잘 됐다. 미션을 하면서는 여유가 없고 부담이 돼서 쉬운 부분도 이해하기 어려웠던 것 같다. 다음주는 즐기면서 참여해야겠다.
  • 5일동안 til을 한 번도 작성하지 않았다.. 다음주는 til을 한 번 작성하는 걸 목표로 해야겠다.. :)

Findings

  • javascript 동등, 일치연산자

    • 연산자 ‘==’(abstract equality comparison operator)의 경우에는 좌우의 변수의 데이터 타입이 같지 않으면 타입을 알아서 변환하려고 한다. 즉, 강제 형변환(type coercion) 을 수행한다.

      console.log(false == 0); // true
      console.log(false == ""); // true
      

      * 아래와 같은 6가지 값은 자바스크립트에서 비교 시(if variable) false 값으로 통용된다.

      • false
      • 0
      • ””
      • null
      • undefined
      • NaN
      if (false || 0 || "" || null || undefined || NaN) {
        console.log("hi");
      } // 'hi' 출력 안 됨!
      
    • 연산자 ‘===’(strict equality comparison operator)의 경우에는 엄격한 동등성을 비교한다. 즉, 타입이 둘 다 같아야 한다.

      console.log("aa" === "bb"); // false (둘 다 문자열 타입이지만 다른 값을 가짐)
      console.log(false === 0); // false (다른 타입, 다른 값)
      console.log(77 === "77"); // false (타입이 다름)
      
    • 비교 연산자 ’==’ ’===’로 객체 비교하기

      • javaScript 에서는 객체들은 reference 타입이다. 다른 주소에 저장되어있는 객체들은 객체의 속성 값들이 모두 다 동일하다고 하더라도 절대로 동일하다고 비교(equal)될 수 없다.

        const a = [1, 2, 3];
        const b = [1, 2, 3];
        const c = a;
        console.log(a == b); // false
        console.log(a === b); //false
        console.log(a == c); // true
        console.log(a === c); // true
        
  • null, undefined

    • ‘없음’을 나타내는 값: null, undefined
    • 사용되는 목적과 장소가 다름
    let foo;
    console.log(foo); // undefined
    const obj = {};
    console.log(obj.prop); // undefined
    
    • javascript에는 위처럼 값이 대입되지 않은 변수나 속성을사용할 경우 undefined를 반환한다.

      console.log(typeof null); // 'object'
      console.log(typeof undefined); // 'undefined'
      
    • null은 ‘객체가 없음’을 나타낸다.
    • 변수에 undefined를 대입하게 되면 코드의 의미가 불명확해짐

      let foo; // foo는 undefined 값을 가짐
      let bar = undefined; // 값을 대입했지만 해당 값은 undefined
      console.log(foo); // undefined
      console.log(bar); // undefined
      
    • 프로그래머의 입장에서 명시적으로 부재를 나타내고 싶다면 null을 사용하는 것이 좋음
    • 하지만 null을 사용하는 것보단 속성 자체를 정의하지 않는 것이 간편해서 널리 사용됨
    const obj1 = {
      name: "aejijeon",
      address: null,
    };
    
    const obj2 = {
      name: "aejijeon",
    };
    
    const obj3 = {
      name: "aejijeon",
      address: undefined,
    };
    
    • obj1보다는 obj2로 정의하는 경우가 더 많음. obj3처럼 선언하지 않는 것이 좋음
    • null, undefined값은 어떤 변수, 속성에도 들어갈수 있기 때문에 값이 null인 경우, undefined인 경우를 고려해서 코드를 짜야햠.

    • null check

      • 어떤 값이 null이나 undefined인지 확인하는 작업을 null check라고 부름
      if (a !== null && a !== undefined) {
        console.log(a);
      }
      
      • ’==’ 연산자를 사용해서 더 간단히 null check를 할 수 있음
      if (a != null) {
        console.log(a);
      }
      
      if (a != undefined) {
        console.log(a);
      }
      
      • 셋 다 같은 의미이다.

      -비교 연산자를 사용할 떄는 ‘==’말고 ‘===’로 사용하는 것을 권장하지만 null check할 때 만큼은 ‘==’를 사용하는 것이 권장되는 편이다.

      console.log(null === undefined); // false
      console.log(null == undefined); // true
      
      console.log(null == 1); // false
      console.log(null == "a"); // false
      console.log(null == false); // false
      
      console.log(undefined == 1); // false
      console.log(undefined == "a"); // false
      console.log(undefined == false); // false
      
      • ’==’ 연산자를 통해 비교할 때 한 쪽에 null이나 undefined가 오면 , 다른 한 쪽에 null 혹은 undefined가 왔을 떄만 true를 반환한다!
  • * 참고

    console.log(0 == NaN); // false
    console.log(false == NaN); // false
    console.log(false == undefined); // false
    

Future Action Plans

  • til 습관화하기.

Feedback