자바스크립트 엔진은 상당히 너그러워서 '적당히' 코딩해도 오류를 뿜어내는 일 없이 '적당히' 처리해줍니다. 그래서 자바스크립트를 사용하며 "뭘 했는지는 모르겠지만, 어쨌든 원하던 결과는 나왔어!"라고 약간은 찜찜해 가며 넘어간 적이 있을 것입니다.
한대 맞고 시작합니다.
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
값이 없어? 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
undefined
와 undeclared
는 완전히 다른 개념이다.
undefined는 접근 가능한 스코프에 변수가 선언되었으나 현재 아무런 값도 할당되지 않은 상태
undeclared는 접근 가능한 스코프에 변수 자체가 선언조차 되지 않은 상태
let a;
console.log(a); // undefined
console.log(b); // Uncaught ReferenceError: b is not defined
선언되지 않은 변수의 typoef 연산 결과는 "undefined"
이다. (???)
let a;
console.log(typeof a); // undefined
console.log(typeof b); // undefined
선언조차 되지 않았지만 브라우저는 오류 처리를 하지 않는다!!
이것이 typeof만의 독특한 안전 가드
다.
그래도...
에러를 내지 않는 typeof 안전 가드 덕분에 선언되지 않은 변수에 사용하면 제법 쓸만하다.
...
1장이라 그런지 내용이 굉장히 가볍게 구성되어 있었습니다. 중요한건 읽으면서 재밌다...!
라고 느꼈어요. 이 책에서 앞으로 무엇을 얻어가게 될지 기대가 많이 됩니다. 😊