YOU DON'T KNOW JS 1장

박정훈·2022년 8월 21일
1

YOU DON'T KNOW JS

목록 보기
1/6
post-thumbnail

자바스크립트 엔진은 상당히 너그러워서 '적당히' 코딩해도 오류를 뿜어내는 일 없이 '적당히' 처리해줍니다. 그래서 자바스크립트를 사용하며 "뭘 했는지는 모르겠지만, 어쨌든 원하던 결과는 나왔어!"라고 약간은 찜찜해 가며 넘어간 적이 있을 것입니다.

한대 맞고 시작합니다.

✨7가지 내장 타입

  • null
  • undefined
  • boolean
  • number
  • string
  • object
  • symbol

boss nun...

object를 제외한 이들을 원시 타입 (primitive)이라고 한다.

🤔이거 뭐야?

typeof null === "object"; // true

null을 반환했으면 좋겠지만, 해당 버그는 결국에는 수정되지 않았다. 타입으로 null 값을 정확히 확인하려면

var a = null;
(!a && typeof a === "object") // true

null은 'falsy'한(false나 다름없는) 유일한 원시 값이지만, 타입은 'object'인 특별한 존재다.

😮함수는 호출 가능한 객체

typeof function a() {} === "function"; //true

typeof 반환 값을 보면 마치 function이 최상위 레벨의 내장 타입처럼 보이지만 명세를 읽어보면 실제로는 object의 하위 타입이다. 함수는 호출 가능한 객체라고 명시되어 있다.

function wow(a, b) {
    console.log("함수는 호출 가능한 객체입니다.")
}

console.log(wow.length) // 2

함수 func는 인자 두 개 (a, b)를 가지므로 함수의 길이는 2다.

🧐배열도 그냥 객체다

const wow = [1,2,3]
console.log(typeof wow === "object") // true

🤸‍♂️값이 없는 vs 선언되지 않은

값이 없어? undefined typeof 결과는 "undefined"

let a;
console.logd(typeof a); // undefined

let b = 42;
let c;

b = c;
console.log(typeof b) // undefined
console.log(typeof c) // undefined

undefinedundeclared는 완전히 다른 개념이다.

undefined는 접근 가능한 스코프에 변수가 선언되었으나 현재 아무런 값도 할당되지 않은 상태

undeclared는 접근 가능한 스코프에 변수 자체가 선언조차 되지 않은 상태

let a;
console.log(a); // undefined
console.log(b); // Uncaught ReferenceError: b is not defined

👿undefined와 not defined는 다르다.

선언되지 않은 변수의 typoef 연산 결과는 "undefined"이다. (???)

let a;
console.log(typeof a); // undefined
console.log(typeof b); // undefined

선언조차 되지 않았지만 브라우저는 오류 처리를 하지 않는다!!
이것이 typeof만의 독특한 안전 가드다.

그래도...
에러를 내지 않는 typeof 안전 가드 덕분에 선언되지 않은 변수에 사용하면 제법 쓸만하다.

...

1장이라 그런지 내용이 굉장히 가볍게 구성되어 있었습니다. 중요한건 읽으면서 재밌다...!
라고 느꼈어요. 이 책에서 앞으로 무엇을 얻어가게 될지 기대가 많이 됩니다. 😊

profile
그냥 개인적으로 공부한 글들에 불과

0개의 댓글