자바스크립트 완벽가이드 | 2장 어휘구조

dev_hee·2022년 6월 22일
1

본문은 자바스크립트 완벽가이드를 읽고 정리한 글입니다.
모든 저작권은 자바스크립트 완벽가이드에 있습니다.

프로그래밍 언어의 어휘 구조란...

그 언어로 프로그램을 작성할 때 지켜야 할 기본적인 규칙의 집합이다.


텍스트

자바스크립트는 텍스트에서 다음과 같은 특징이 있다.

  1. 대소문자 구별
  2. 토큰 사이의 공백 무시 (공백, 줄바꿈)

주석

자바스크립트의 주석은 다음과 같다.

// 한 줄 주석

/* 
 * 여러 줄 주석
 */

리터럴 literal

리터럴이란 프로그램 안에 직접 쓴 데이터 값이다.
사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법이라고도 한다.

123 
1.23
"안녕"
'반가워'
true
false
null // 객체가 존재하지 않음

식별자와 예약어

식별자

식별자는 이름이다.
식별자는 상수, 변수, 프로퍼티, 함수, 클래스의 이름에 사용된다.
일부 루프의 라벨로도 사용한다.

식별자의 시작 조건은 다음과 같다.

  • 글자
  • 밑줄 (_)
  • 달러 기호 ($)

예를 들어 다음은 모두 유효한 식별자이다.

i
my_value
v2
_lodash
$div

식별자는 예약어를 사용할 수 없다.

예약어

예약어는 자바스크립트의 일부분이다.
예약된 키워드는 상수, 변수, 함수, 클래스의 이름으로 사용할 수 없다.
단, 객체의 프로퍼티 이름으로는 쓸 수 있다.

하지만 일부 예약어는 제한적인 컨텍스트에서 사용되어서 식별자로 써도 문제가 없다. (ex. from, set, target)


유니코드

유니코드도 식별자로 사용할 수 있다.
자바스크립트는 유니코드 문자셋으로 작성되기 때문이다.
하지만 수정할 때 편리하도록 식별자는 아스키코드만 사용하는 것이 일반적이다.

유니코드 이스케이프 시퀀스

자바스크립트는 유니코드 문자셋을 지원하지만,
유니코드를 처리하지 못하는 하드웨어나 소프트웨어를 위해서
유니코드 이스케이프 시퀀스를 정의한다.

이스케이프 시퀀스 (escape sequence)
아스키 문자만으로 유니코드 문자를 표현하는 방법이다.

유니코드 이스케이프는 다음과 같은 규칙을 가진다.

  • \u 문자로 시작
  • 뒤에 네 개의 16진수 숫자 (0-9, A-F) -> 예전 방식
  • 또는 1~6개의 16진수 숫자를 중괄호 안에 -> 이모지 처럼 16비트 이상이 필요한 경우

유니코드 이스케이프 사용하는 곳

  • 문자열 리터럴
  • 정규 표현식 리터럴
  • 식별자 (키워드는 X)

예로, 다음과 같이 세가지 방법으로 변수 이름을 사용할 수 있다.
즉 세 가지 모두 같은 변수 café 를 가리킨다.

let café =1;
caf\u00e9
caf\u{E9}

유니코드 정규화

유니코드는 그 문자를 인코딩 하는 방법이 하나 이상이 있다.
따라서 자바스크립트 프로그래밍에서 유니코드를 사용할 때 주의해야한다.

예를들어 é 문자는 다음 두 가지 방법으로 인코드할 수 있다.

  • \u00E9 : 단일 유니코드 문자
  • e\u0301 : e 문자 다음 악센트 조합 기호

텍스트 에디터에선 동일하게 보이지만 자바스크립트는 이 둘을 다른 것으로 간주하므로, 유니코드를 식별자로 사용하는 경우엔 서로 다른 식별자로 인식할 수 있다.

따라서 유니코드를 정규화 하는 과정을 통해 눈우로 구분할 수 없는 다른 식별자가 생기지 않도록 해야한다.


세미콜론

자바스크립트는 다음 두 가지로 문을 구분한다.

  • 문의 끝에 세미콜론 (;)
  • 줄바꿈이 있고 현재 문에 다음 문이 이어질 수 없을 때

줄바꿈을 하는 경우에 세미콜론을 생략할 순 있지만,
줄바꿈이 없는 경우엔 반드시 세미콜론으로 문을 구분해야한다.

// 가능
a = 1;
b = 2;

// 가능
a = 1
b = 2

// 가능
a = 1; b= 2;

// 불가능
a = 1 b= 2 

자바스크립트는 줄바꿈이 있고 현재 문에 다음 문이 이어질 수 없을 때 문을 구분한다.

let a
a
=
3
console.log(a)

let aa 는 이어질 수 없는 문이므로 문이 구분된다.
하지만 a= 그리고 3 은 서로 이어질 수 있으므로 하나의 문으로 해석한다.
3console.log 는 이어질 수 없으므로 문이 구분된다.

방어적 세미콜론

일반적으로 문이 (, [, /, + 로 시작하면 그 문은 이전 문이 계속되는 것으로 해석될 수 있다.

따라서 다음 처럼 방어적인 목적으로 이런 문 앞에 세미콜론을 삽입할 수 있다.

let x = 0
;[x, x+1, x+2].forEach(console.log) // 방어적 세미콜론

줄바꿈에서 문의 구분 예외

자바스크립트에서 줄바꿈이 있고 현재 문에 다음 문이 이어질 수 없을 때 문을 구분하는 규칙세 가지 예외가 있다.

  1. return, throw, yield, break, continue 키워드 다음에 줄바꿈 후 식별자나 표현식이 오더라도 이어진 문으로 보지 않는다.
  • 예시
return
true;
  • 실제 자바스크립트 해석
return; true;
  • 개발자 의도
return true;

따라서 return, throw, yield, break, continue 키워드 다음에 어떤 표현식이 쓰여지면 그 사이에 줄바꿈이 들어가면 안된다.

  1. ++, -- 후위 연산자

후위 연산자는 반드시 적용할 표현식과 같은 행에 작성해야한다.

  1. 화살표 함수의 =>

반드시 매개변수 리스트와 =>는 같은 행에 있어야 한다.

profile
🎨그림을 좋아하는 FE 개발자👩🏻‍💻

0개의 댓글