다음 책들과 MDN의 내용을 모아 자바스크립트 핵심 위주로 정리해 보았습니다. 여러 권의 책을 한 글로 훑어볼 수 있도록 최대한 간결하게 정리하겠습니다.
모던 자바스크립트 Deep Dive - 이웅모
You Don’t Know JS - Kyle Simson
자바스크립트는 왜 그 모양일까?(How JavaScript Works) - Douglas Crockford
자바스크립트 완벽 가이드(JavaScript: The Definitive Guide 7/E) - David Flanagan
더글라스 크락포드(Douglas Crockford)는 많은 연설과 기고문에서 자바스크립트 강제변환은 반드시 피해야 한다고 역설한 바 있다. 그는 아마도 암시적 강제변환을 나쁜 것이라 생각한 모양이다. 하지만 그 자신이 직접 작성한 예제 코드에도 명시적/암시적 강제변환을 혼용했다! 사실 그가 주로 염려했던 것은 동등 연산(==)이 아니었나 싶은데, 이 장을 계속 읽다 보면 여러분도 알겠지만, 동등 연산은 강제변환 메커니즘의 일부에 지나지 않는다.
카일 심슨 , 『You Don’t Know JS - 타입과 문법, 스코프와 클로저』, 한빛미디어(2017), p113.
String(1); // “1”
(1).toString(); // “1”
1 + ''; // "1"
Number("1"); // 1
parseInt("-1"); // -1
+ '0'; // 0
'0' * 1; // 0
Boolean(0); // false
!!1 // true
const elem = null;
const value = elem?.value;
console.log(value); // undefined
const foo = null ?? "string";
console.log(foo); // "string"
const a = "42";
const b = true;
a == b; // false
const a = new String("a");
typeof a; // "String"일 것 같지만 실제로는 "object" 다.
console.log(a); // 브라우저마다 결과가 다름
빈번하게 문자열 값의 프로퍼티/메서드를 사용해야 한다면 자바스크립트 엔진이 암시적으로 객체를 생성할 필요가 없도록 처음부터 값을 객체로 갖고 있는 것이 이치에 맞는 것처럼 보인다. 하지만 좋은 생각이 아니다. 오래전부터 브라우저는 이런 흔한 경우를 스스로 최적화하기 때문이다. 즉, 개발자가 직접 객체 형태로 ‘선 최적화(Pre-Optimize)’하면 프로그램이 더 느려질 수 있다. 직접 객체 형태로 써야 할 이유는 거의 없다. 필요시 엔진이 알아서 암시적으로 박싱하게 하는 것이 낫다.
카일 심슨 , 『You Don’t Know JS - 타입과 문법, 스코프와 클로저』, 한빛미디어(2017), p70.
References
데이비드 플래너건 , 『자바스크립트 완벽 가이드』, 인사이트(2022)
더글러스 크락포드 , 『자바스크립트는 왜 그 모양일까?』, 인사이트(2020)
카일 심슨 , 『You Don’t Know JS - 타입과 문법, 스코프와 클로저』, 한빛미디어(2017)
이웅모 , 『모던 자바스크립트 Deep Dive』, 위키북스(2020)