Chapter 1. JS에 익숙해지기
어떤 JS를 사용하고 있는지 알아야 한다.
-
웹 프로그램은 모든 부라우저에서 지속적으로 동작할 수 있도록 주의해서 작성하자
- why?
- 웹 브라우저마다 JS 버전이 다르고, 버전이 다르면 동작방식에 차이가 있음.
-
JS의 새로운 표준 또는 비표준 기능을 사용할 경우, 먼저 이런 기능을 지원하는 환경인지를 파악 후에 사용
- why?
- JS는 웹 뿐만 아니라 서버, 모바일 등 다양한 환경의 App을 만들 때에도 사용된다.
- 이 경우엔 JS버전이 구체화 되기에 지원되는 기능인지 확인 후 사용해야 한다.
-
"use strict" 사용
- why?
- "use strict"는 다양한 버전의 오류를 일으키기 쉽거나 문제를 일으킬 만한 기능들을 사용할 수 없게 한다.
부동 소수점 숫자 이해하기
- int, float, long, double 같이 잘 알려져있는 타입들은 JS 에선 모두 number type
- JS의 number 타입은 IEEE 754 표준에서 정의한 64bit 배정밀도로 인코딩된 double 타입
- JS에서 64bit 부동 소수점 연산의 특징
- 비트 단위 연산 수행 과정
- (1). 비트 단위 연산 시, 64bit가 아닌 32bit 정수로 치환
- (2). 연산수행
- (3). 결과를 다시 부동소수점으로 치환 후 반환
- (4). 반환된 값을 저장
- 최적화 컴파일러가 데이터를 내부적으로 정수형으로 저장하여 부가적인 연산을 회피
- when ?
- 연산표현식이나 변수가 명시적으로 정수형으로 동작할 경우
- 64bit 부동 소수점 연산은 산술연산에서 문제를 일으키기도 함
- why ?
- 부동 소수점 산술 연산은 근사 값만 만들어 낼 수 있다.
- 근사 값은 표현 가능한 가장 가까운 실수로 반올림해서 생성
- 이런 근사 값들끼리의 계산이 누적되면 부정확한 결과를 초래함
- 따라서 웬만하면 소수를 정수형태로 바꿔서 계산 (정수는 반올림해서 근사 값을 만들 필요가 없으니)
- 예를 들어, n 달러는 n*10 센트로 치환해서 계산 (돈 관련된 계산은 문제가 생기면 치명적이게 된다...)
암묵적인 형변환을 주의하라
- JS 는 데이터 형 오류에 관대하다.
- 관대하다 ? : 다른 프로그래밍언어에서 오류를 발생시킬 법한 코드를 JS에선 암묵적으로 형변환함.
- Truthy & Falsy
- Truthy : true 로 처리되는 값
- JS에선 Falsy 값 7개를 제외하고 모든 값은 Truthy
- Falsy : false 로 처리되는 값
- false, 0, -0, NaN, null, undefined, ""
- JS 구현체에 따라 Falsy 값들이 서로 다른 경우가 종종 있다고 하니 Falsy 에 의지하지는 말자.
"암묵적인 형변환은 프로그램의 규모가 커질 수록 예측하기 어려운 값들을 만들어 냄"
객체 래펖보다 원시 데이터형을 우선시하라
- 원시 데이터형과 원시 데이터형을 위한 객체 래퍼는 서로 다르며 동작이 다름
- 원시 데이터형 문자열과 다르게, String 객체는 진짜 객체임
- String 객체는 개별 객체
- String 객체는 개별 객체이기에 자기자신과만 동일
- 암묵적인 감싸기
- 원시 데이터형을 객체 래퍼로 암묵적 강제 형변환 하여 메서드드를 사용할 수 있도록 함
- 암묵적인 감싸기는 실행될 때 마다 새로운 객체를 생성
"암묵적인 강제 형변환에 속아 추적이 어려운 오류를 발생시키지 말자"
혼합된 데이터형을 == 로 비교하지 마라
- 보기에 연관이 없는 두 값을 암묵적 강제 형변환에 의지하여 == 로 비교하지 말자
- Why ? : 코드를 읽는 사람이 형변환 법칙을 기억하려고 애쓸 필요없이 어떤 변환이 적용되는지 정확하게 알 수 있도록 하는 것이 더 깔끔하고 좋은 코드임
"코드를 읽는 사람이 더 예측하기 쉬운 코드를 작성하자"
세미콜론(;) 삽입의 한계에 대해 알아두자
- 세미콜론은 한 줄 이상의 새로운 행이나, 프로그램 입력의 마지막이나 '}' 토큰 전에 삽입
- 세미콜론은 줄의 마지막, 블록의 마지막, 프로그램의 마지막 부분에서 생략해도 됨
- 세미콜론은 다음 입력 토큰을 파시할 수 없을 때에 삽입됨
- 세미콜론은 생략한 줄의 다음 줄의 토큰이 생략한 줄의 연장선으로 해석될 수 있으면 이 줄에 세미콜론을 넣지 않음
- 다음 줄 토큰이 '(', '{', '+', '-', '/' 로 시작할 경우 연장선으로 해석될 경우가 많음
- 세미콜론은 for 반복문의 머리 부분에서는 세미콜론이 구부나 또는 빈 선언문으로 추론되어 삽입되는 경우는 없음
따라서
- JS 세미콜론 생략가능 하지만 웬만하면 세미콜론 넣는 것을 습관화하자.
- Why? : JS 는 자동으로 세미콜론을 삽입하지만, 코드를 어떻게 작성하더라도 JS가 작성자의 의도에 맞게 세미콜론을 삽입해 주는 것을 아니니까
- 외에도, 코드리뷰시, 세미콜론 누락된 코드를 보면 코드 검토를 하지 않은 것 같은 느낌이 들게함.
문자열을 16비트 코드 단위의 시퀀스로 간주하라
- 시간이 지남에 따라 유니코드의 범위가 확장되어 16비트 코드 유닛 하나만으로는 표현하기 어려운 문자들이 등장
- JS는 16비트 문자 인코딩을 사용
- 이모지 같은 거 문자열에 넣으면 문자열 index 가 예상하기 어려운 경우가 많다.
따라서
- 두개의 코드 유닛(== 대리쌍)으로 작성되는 문자열을 많이 다루는 프로그래밍을 할 경우 코드 포인트를 인식할 수 있는 라이브러리를 사용하는 것이 좋음.
작성중
마크다운 수정 및 예시 코드 넣어야함
출처 : Effective JavaScript
David Herman 저. 김준기 역.
yes24
