프론트엔드 데브코스 5기 TIL 14 - 과제코드리뷰/SPA TodoApp

김영현·2023년 10월 13일
0

TIL

목록 보기
16/129

코드리뷰

  • typeof, Array.isArray에 대해 조사해보고 constructor로 타입을 검사할때의 한계를 조사해보자!
  • 리액트 map()으로 컴포넌트 뿌려줄때 index를 기본키로 사용하는 이유
    => 리액트는 결국 UI를 위한 라이브러리. CSR이기에 간단하게만들어서, 내부 로직은 개발자의 몫이다.
  • validation도 개발자의 몫. 어디까지 검사할 것인지 정하는 것.

typeof

피연산자의 평가 전 자료형을 문자열로 반환해준다.
참고로 배열===객체기에 배열도 객체로 변환된다.
반환표는 아래와 같다.

Undefined : "undefined"
Null : "object" (아래 참고)
Boolean : "boolean"
Number : "number"
BigInt : "bigint"
String : "string"
Symbol (ECMAScript 2015에서 추가) : "symbol"
호스트 객체 (JS 환경에서 제공) 구현체마다 다름
Function 객체 (ECMA-262 표현으로는 [[Call]]을 구현하는 객체) : "function"
다른 모든 객체 : "object"

JS가 값과 태그로 구분하던 시절 객체의 태그는 "0"이었다.
대부분의 프로그래밍 언어에서는 return 0 === return null (null pointer)
따라서 null이 object로 리턴되게 됨.
=> 대부분의 원시값은 잘 판단하지만 null, array는 판단하지 못함

Array.isArray

It does not check the value's prototype chain,
프로토타입 체인을 따라가지 않는다. 현재의 값만 배열인지 판단한다.
배열인지 아닌지 절대적으로 판단해준다. 무적임!
=> 다만 배열 외의 값 판단은 못한다.

constructor

이 값의 생성자가 무엇인지 찾아보는것이다.
값.constructor이렇게 사용한다.
과제에서 깊은복사 유틸함수를 제작했을때 객체,배열 판단을 constructor로 했다.
이 부분을 멘토님이 짚어주셨다. 이걸로 검사할때의 한계를 알아보자.
constructor는 프로토타입 체인을 따라가서 판단한다.
다시말해, 생성자함수를 뱉는다.
리터럴이나 빌트인 생성자로 정의한 값이라면 문제 없지만...
사용자가 만든 생성자함수로 정의한 값(인스턴스)라면 얘기가 달라진다...

내가 원하는값은 모든 객체의 프로토타입인 Obejct였다.
그러나 생성자함수가 반환된다.

잘 알고쓰는게 중요하다...검색해서 나왔다고 막 쓰지말자.


SPA TodoApp

강사님의 코드를 보고 따라치는건 좋지 않은것 같다.
주말에 혼자 만들어봐야지...

profile
모르는 것을 모른다고 하기

0개의 댓글