본 포스팅은 '모던 자바스크립트 Deep Dive'를 기반으로 공부한 내용을 정리한 것입니다.
문과 표현식을 구별하고 해석할 수 있다면 자바스크립트 엔진의 입장에서 코드를 읽을 수 있고 실행 결과를 예측하는데 도움이 된다.
값
은 식이 평가되어 생성된 결과이다. 여기서 평가란 식을 해석해서 값을 생성하거나 참조하는 것.
리터럴
은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법이다.
리터럴 | 예시 |
---|---|
정수 리터럴 | 100 |
2진수 리터럴 | 0b01000001 |
문자열 리터럴 | 'Hello' |
불리언 리터럴 | true, false |
null 리터럴 | null |
undefined 리터럴 | undefined |
객체 리터럴 | { name: 'Lee', address: 'Seoul' } |
배열 리터럴 | [1,2,3] |
함수 리터럴 | function() {} |
정규 표현식 리터럴 | /[A-Z]+/g |
표현식
은 값으로 평가될 수 있는 문이다. 즉, 값을 가지는 문으로써 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조한다.
리터럴은 값으로 평가되므로, 표현식이다.
var score = 50 + 50; // 숫자값 100을 생성하므로 표현식이다.
score; // 식별자 참조, 값을 생성하지는 않지만 값으로 평가되므로 표현식이다.
문
은 프로그램을 구성하는 기본 단위이자 최소 실행 단위다. 문은 여러 토큰으로 구성된다. 토큰
은 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미한다.
var sum = 1 + 2;
var
, sum
, =
, 1
, +
, 2
, ;
모두 토큰이다.
먼저 정리하자면,
표현식
은 값으로 평가될 수 있는 문이었고, 문
은 최소 실행 단위이다.
표현식인 문
은 값으로 평가될 수 있는 문이며, 표현식이 아닌 문
은 값으로 평가될 수 없는 문을 말한다.
var x; // 변수 선언문은 값으로 평가될 수 없으므로 표현식이 아니다.
x = 1 + 2; // 표현식인 문이다.
여기서 표현식인 문은 값처럼 사용할 수 있다.
var foo = x = 1 + 2;