다음 책들과 MDN의 내용을 모아 자바스크립트 핵심 위주로 정리해 보았습니다. 여러 권의 책을 한 글로 훑어볼 수 있도록 최대한 간결하게 정리하겠습니다.
모던 자바스크립트 Deep Dive - 이웅모
You Don’t Know JS - Kyle Simson
자바스크립트는 왜 그 모양일까?(How JavaScript Works) - Douglas Crockford
자바스크립트 완벽 가이드(JavaScript: The Definitive Guide 7/E) - David Flanagan
문자열은 사람과 컴퓨터 간에 존재하는 틈을 이어주는 다리입니다. 문자와 정수를 연결하는 것은 디지털 컴퓨터 개발에 있어서 중요한 진전 중 하나였습니다. 사용자 인터페이스 개발에 있어 중요한 첫 번째 발걸음이 되었죠.
더글러스 크락포드 , 『자바스크립트는 왜 그 모양일까?』, 인사이트(2020), p105.
C에는 하나의 문자를 위한 데이터 타입(char)만 있을 뿐 문자열 타입은 존재하지 않는다. C에서는 문자열을 문자의 배열로 처리하고 자바에서는 문자열을 String 객체로 처리한다. 하지만 자바스크립트는 개발자의 편의를 위해 원시 타입인 문자열 타입을 제공한다. 이는 자바스크립트의 장점 중 하나다.
이웅모 , 『모던 자바스크립트 Deep Dive』, 위키북스(2020), p140.
유니코드의 원래 목적은 세상에 존재하는 모든 언어를 16비트로 표현하는 것이었습니다. 나중에는 전 세계의 언어를 21비트로 표현하는 것으로 바뀌었죠. 아쉽게도 자바스크립트는 유니코드가 16비트로 표현하려던 시절에 설계되었습니다.
더글러스 크락포드 , 『자바스크립트는 왜 그 모양일까?』, 인사이트(2020), p108.
자바스크립트의 문자열 메서드는 대부분 문자가 아니라 16비트 값 단위로 동작합니다. 문자열 메서드는 써로게이트 페어를 특별 취급하지 않습니다. 따로 정규화하지도 않고, 심지어 문자열이 정확한 UTF-16 형식인지 검사하지도 않습니다. 하지만 ES6에서 문자열은 이터러블(iterable)이고, 문자열에 for/of 루프나 … 연산자를 사용하면 16비트 값이 아닌 실제 문자를 순회합니다.
데이비드 플래너건 , 『자바스크립트 완벽 가이드』, 인사이트(2022), p36.
개행 문자는 텍스트의 한 줄이 끝남을 표시하는 문자 또는 문자열이다. 개행 문자에는 라인 피드(LF)와 캐리지 리턴(CR)이 있다. 이는 과거 타자기에서 커서를 제어하는 방식에서 비롯된 것이다. …현대의 컴퓨터 운영체제는 서로 다른 체계의 개행 방식을 사용한다. 윈도우는 CR+LF로 새 줄을 나타내고 유닉스는 LF로 새 줄을 나타낸다. macOS에서는 버전 9까지 CR로 새 줄을 나타냈지만 버전 10부터 LF를 사용한다. 따라서 서로 다른 운영체제에서 작성한 텍스트 파일은 서로 개행 문자를 인식하지 못한다. 다만 대부분의 텍스트 에디터는 운영체제에 맞게 개행 문자를 자동으로 변환해주므로 큰 문제는 없다.
이웅모 , 『모던 자바스크립트 Deep Dive』, 위키북스(2020), p63. - 라인 피드와 캐리지 리턴
웹 브라우저의 DOM API가 잘못 설계된 데다가 오류도 많아서, 그 대신 템플릿을 이용해서 HTML 뷰를 만드는 방법이 더 각광받고 있습니다. DOM과 씨름하는 것보단 더 쉬운 방법이지만, 대신 XSS(Cross Site Scripting)나 그 외에 다른 웹 보안 문제를 일으킬 수 있습니다. 자바스크립트의 템플릿 문자열 리터럴은 이런 보안 문제를 해결하면서 템플릿을 지원하기 위해 개발되었으며, 실제로 가끔 그 의도대로 안전한 템플릿을 제공하기도 합니다.
더글러스 크락포드 , 『자바스크립트는 왜 그 모양일까?』, 인사이트(2020), p110-111.
템플릿 리터럴에는 강력하지만 잘 사용되지 않는 기능이 하나 있습니다. 여는 백틱 바로 앞에 함수 이름(태그)이 있으면 템플릿 리터럴의 텍스트와 표현식 값이 함수에 전달됩니다. 그리고 이 ‘태그된 템플릿 리터럴’의 값이 함수의 반환 값입니다.
`\n`.length // 1 뉴라인 문자 하나` `String.raw`\n`.length // 2 역슬래시 문자와 n
데이비드 플래너건 , 『자바스크립트 완벽 가이드』, 인사이트(2022), p42.
/^HTML/; // 문자열의 시작 부분이 HTML과 일치
/[1-9][0-9]*/; // 0이 아닌 숫자가 하나 있고 그 뒤의 숫자는 제한 없음
컴파일러는 컴파일 과정에서 소스 코드를 토큰화합니다. …안타깝게도 자바스크립트는 토큰화하기에는 아주 어려운 언어입니다. 이는 정규표현식 리터럴과 자동 세미콜론 삽입 간의 상호 작용 때문입니다. 이 상호작용이 프로그램이 코드를 분석할 때 헷갈리게 만들죠.
return /a/i; // 정규표현식 객체 리턴` return b.return /a/i; // return ((b.return) / a) / i
더글러스 크락포드 , 『자바스크립트는 왜 그 모양일까?』, 인사이트(2020), p114.
References
데이비드 플래너건 , 『자바스크립트 완벽 가이드』, 인사이트(2022)
더글러스 크락포드 , 『자바스크립트는 왜 그 모양일까?』, 인사이트(2020)
카일 심슨 , 『You Don’t Know JS - 타입과 문법, 스코프와 클로저』, 한빛미디어(2017)
이웅모 , 『모던 자바스크립트 Deep Dive』, 위키북스(2020)