본문 바로가기

공부를 합니다/언어 (Language)

JavaScript: The Definitive Guide_2 Lexical Structures

Chapter 2. Lexical Structure

  • Lexical Structure: 해당 언어로 프로그램을 작성하기 위해 특정한 기본적인 규칙.

2.1 Character Set


  • JavaScript 프로그램은 Unicode character set을 이용해서 적는다.

2.1.1 Chase Sensitivity

  • JavaScript는 case-sensitive 하다.
  • HTML은 case-sensitive 하지 '않기' 때문에 주의해야한다.

2.1.2 Whitespace, Line Breaks, and Format Control Characters

  • JavaScript는 프로그램의 token 사이에 나타나는 space와 대부분의 line breaks를 무시한다.
  • 일반적인 space character (\u0020)나 line breaks 외에도 다른 같은 문자를 whitespace나 line terminator로 인식한다. 목록은 서적 참고.
  • Format control character는
    • comment, string literals, regular expression literals에는 사용할 수 있지만
    • identifiers (e.g., variable names)에는 사용할 수 없다.

2.1.3 Unicode Escape Sequences

  • Unicode를 지원하지 않거나 일부만 지원하는 경우를 위해 JavaScript는 모든 16-bit Unicode codepoint를 나타낼 수 있는 여섯 자리의 ASCII문자를 정의해놨다.
  • \u로 시작하고 네 개의 16진수 숫자로 이루어져있다.
"café" === "caf\u00e9" // => true

2.1.4 Normalization

  • Unicode는 동일한 문자가 여러 방식으로 encoding되어 있을 수 있기 때문에 Unicode standard는 보다 원활한 비교를 위해 선호되는 encoding과 text를 canonical form으로 변환하는 normalization 과정을 정해놨다.
  • JavaScript는 interpret하는 소스 코드가 이미 nomalized되어 있다고 가정한다.

2.2 Comments


JavaScript의 주석(comments)은 두 가지 방법으로 작성할 수 있다.

  • //와 문장 끝 사이의 text는 주석처리.
  • /**/ 사이의 text는 주석처리.

2.3 Literals


Literal 프로그램에 직접 명시되는 데이터 값.

Example 설명
12 숫자 12
1.2 숫자 1.2
"hello world" 문자열 (""사용)
'Hi' 다른 문자열 표기법 (''사용)
true Boolean 값
false 다른 Boolean 값
\javascript\gi 정규표현식(Regular expression)
null object가 존재하지 않을 때

2.4 Identifiers and Reserved Words


Identifier 간단하게는 이름이다. 변수(variables)나 함수(functions)나 반복문(loops)에 이름을 제공할 때 사용된다.

  • JavaScript의 identifier는 letter, underscore (_), dollar sign ($)으로 시작해야한다.
  • 이어지는 문자로는 위의 세 개에 숫자(digits)까지 사용 할 수 있다.
  • 숫자와 문자는 모든 Unicode character set을 포함한다.

2.4.1 Reserved Words

몇 개의 identifier는 이미 JavaScript의 언어 자체의 keywords로 사용되고 있어 자신이 만든 프로그램의 identifier로 사용할 수 없다.

자세한 사항과 목록은 서적 참고.


2.5 Optional Semicolons


JavaScript는 statement를 구분하기 위해서 semicolon (;)을 사용한다. Semicolon을 표기하는 것은 자신의 코드의 의미를 명확하게 만드는데 중요하다.

프로그래머마다 semicolon을 표기하는 법이 다르며

  • 모든 statement에 명시적(explicitly)으로 semicolon을 찍어주는 경우가 많지만
  • 필요한 곳에만(optionally) semicolon을 표기해주기도 한다.

Optional하게 semicolon을 사용하기 위해서는 다음의 몇 가지 사항을 이해하고 있어야한다.

  • JavaScript는 모든 line break를 semicolon으로 취급하지 않는다. 일반적으로 semicolon없이 코드 구문을 해석할 수 없을때만 line break를 semicolon으로 취급한다.

    var a
    a
    =
    3
    console.log(a)
    
    // how JavaScript interprets
    var a; a = 3; console.log(a)
  • 이런 규칙때문에 일부 코드는 의도와 다르게 인식될 수 있다.

    var y = x + f
    (a+b).toString()
    
    // can be interpreted as
    var y = x + f(a+b).toString();
  • 일반적으로 statement가 (, [, /, +, - 등으로 시작하면 statement가 이전 statement와 연속되어 있다고 인식될 수 있다.


JavaScript가 line breaks를 semicolon으로 해석하는 규칙에 두 가지 예외가 있다.

  • return, break, continue statement 뒤에 바로 오는 line break는 항상 semicolon으로 인식한다.

  • ++-- operator를 사용하는 경우 문자 → operator 사이의 line break는 항상 semicolon으로 인식한다.
    Operator를 postfix로 사용하고 싶으면 반드시 하나의 line안에 같이 적어줘야 한다.

    x
    ++
    y
    
    // interpreted as
    x; ++y;
    // not as
    x++; y;

참고


Token

Unicode

Control Characters

Unicode Normalization


2020.06.01 13:24 작성.