이번에 이펙티브 자바스크립트라는 책으로 사내 스터디를 진행하게 되었습니다.
1장에서 기록할 만한 정보를 간단히 글로 작성하고자 합니다.

Item 1

해당 아이템은 환경에 따른 JS(JavaScript)를 알고 사용해야 한다는 것을 풀어서 말하고 있습니다.
웹 관련 작업을 하다보면 자연스럽게 주의하게 되는 호환성 관련 내용인 것이죠.
서버, 모바일 등의 여러 환경에서 프로그래밍할 때, 해당 JS 엔진이 그 스펙을 사용할 수 있는지 파악해야 합니다.
또한 “use strict”를 사용해, 문제가 일어나는 곳을 방지하는 작업 환경을 만드는게 중요하다는 걸 인지 시켜준 아이템 이였습니다.

Item 2

JS는 숫자에 타입(int, double… 등)이 따로 없으며, number로 통채로 취급합니다. 이러한 모두 부동 소수점 연산을 하는 것에 대한 주의점을 인지시켜주는 아이템 이였습니다.

console.log(0.1 + 0.2) // 0.30000000000000004

위와 같은 현상이 일어나는 이유가 부동 소수점 연산의 단점입니다.

Item 3

암묵적인 형변환에 대한 주의점을 알려주는 아이템이였습니다.
JS는 다른 프로그래밍 언어들에 비해, 연산에서 많이 관대합니다.(물론 연산 외에 다른 영역에서도 관대합니다…)
문자열 + 숫자와 같은 신기한 연산도 알아서 처리해 줍니다.

console.log(3 + true); // 4
console.log("Hi" + 2); // "Hi2"

Item 4

이 아이템의 경우는 원시 데이터형을 위한 객체 래퍼를 사용하지 마라. 라는 것을 풀어서 설명하는 아이템이였는데요.
여기서 암묵적으로 원시타입에 래퍼 객체(wrapper object)가 생성되고, 해당 객체의 메서드를 사용할 수 있는 것을 알려줍니다.

"string".toUpperCase(); //STRING

위와 같은 연산도 문자열 원시타입에 래퍼 객체가 암묵적으로 생성되어 사용할 수 있는 것이죠.

Item 5

음… 간단히 요약하면, == 연산보다 === 비교 연산을 사용하자고 권장하는 아이템이였습니다.

Item 6

저에게 JS가 다른 언어와 매우 큰 차이를 느끼게 해준 세미콜론(;)을 넣지 않아도 실행되는 비밀을 알려준 아이템이였습니다.
JS는 저희가 작성한 코드를 파싱하고, 나름의 규칙을 가지고 세미콜론을 삽입하는데요. 줄의 마지막, 블록의 마지막, 프로그램의 마지막 등에 세미콜론을 삽입합니다.
여기서 함정은 '(', '[', '+', '-', '/'토큰이 다음줄에 이어서 있다면, 세미콜론을 넣지 않는다는 것 입니다.

const a = 1;
const b = 2;
a + b
[1,2,3].forEach(a => console.log(a));

위의 코드들이, 아래와 같이 파싱이 되는 것이죠.

const a = 1;
const b = 2;
a + b[1,2,3].forEach(a => console.log(a));

Item 7

유니코드에 대한 유의점을 인식시켜 주는 아이템이였습니다.

"𝄞hello".charAt(1); // '\uDD1E'
"𝄞hello".charAt(2); // 'h'

이 책은, es5 기준으로 작성된 책입니다. 그래서 다소 예전 방식을 권유하기도 하고, 그 이전의 JS 대해서도 다루기도 합니다. 그래서 볼 의미가 없는 책이냐? 라고 질문을 누군가 한다면, 한 번쯤 읽으면 좋다는 답변을 드릴 것 같습니다.

업데이트:

댓글남기기