값, 리터럴, 표현식, 문
값 (value)
값은 표현식이 평가되어 생성된 결과를 말한다.
모든 값은 데이터 타입을 가지며 메모리에 2진수로 저장된다. 저장된 값은 데이터 타입에 따라 다르게 해석될 수 있다.
0100 0001
은 숫자로 해석하면 65지만 문자로 해석하면 ‘A’ 다.
앞서 배운 변수는 하나의 값을 저장하기 위해 확보된 메모리 공간이므로 변수에 할당되는 것은 값이다.
var sum = 10 + 20; // 변수 sum에 할당되는 것은 10 + 20이라는 표현식이 아니라 30이라는 값이다.
리터럴 (literal)
리터럴은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법을 말한다.
- 즉, 리터럴은 값을 생성하기 위해 미리 약속한 표기법이라 할 수 있다.
- 리터럴은 런타임 시점에 평가해 값을 생성한다.
리터럴 | 예시 | 비고 |
---|---|---|
정수 리터럴 | 100 | |
부동소수점 리터럴 | 10.5 | |
2진수 리터럴 | 0b0100001 | 0b로 시작 |
8진수 리터럴 | 0o101 | ES6에서 도입, 0o로 시작 |
16진수 리터럴 | 0x41 | ES6에서 도입, 0x로 시작 |
문자열 리터럴 | 'Hello’ “World” | |
불리언 리터럴 | true false | |
null 리터럴 | null | |
undefined 리터럴 | undefined | |
객체 리터럴 | ||
배열 리터럴 | [1, 2, 3] |
|
함수 리터럴 | function() {} | |
정규 표현식 리터럴 | /[A-Z]/ |
표현식 (expression)
표현식은 값으로 평가될 수 있는 문이다. 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조한다.
위에서 살펴본 리터럴도 값으로 평가되므로 리터럴도 결국 표현식이다.
var number = 7
7
은 리터럴이면서 평가되어 값을 생성하므로 7
은 그 자체로 값이자 표현식이다.
var sum = 1 + 1;
1 + 1
은 리터럴과 연산자로 이루어져있다. 이도 평가되어 값 2
를 생성하므로 표현식이다.
var score = 10;
score; // 표현식
score
변수가 선언되어있고, 변수 식별자를 참조하면 값으로 평가되므로 표현식이다.
즉, 리터럴은 값으로 평가될 수 있는 문은 모두 표현식이다.
표현식은 값으로 평가되고, 표현식과 표현식이 평과된 값은 동등한 관계 동치
이다. 따라서 표현식은 문법적으로 값이 위치할 수 있는 자리에 표현식도 위치할 수 있다.
var x = 1 + 2; // + 연산자의 좌항과 우항에는 숫자 값이 위치해야 한다.
var y = 1;
var z = y + 2; // y가 숫자 값으로 평가되므로 + 연산자의 좌항에 위치할 수 있다.
이처럼 표현식은 다른 표현식의 일부가 되어 새로운 값을 만들어낼 수 있다.
문(statement)
문은 프로그램을 구성하는 기본 단위이자 최소 실행 단위다. 문의 집합으로 이뤄진 것이 프로그램이다.
문은 명령문이라고도 하며 선언문, 할당문, 조건문, 반복문 등으로 구분할 수 있다.
세미콜론 (;) 과 세미콜론 자동 삽입
세미콜론(;)은 문의 종료를 나타내며, 자바스크립트 엔진은 문이 종료한 위치를 파악하고 순차적으로 문을 하나씩 실행한다. 따라서 문을 끝낼 때는 세미콜론을 붙여야 한다.
하지만 코드블록 ({...})
뒤에는 세미콜론을 붙이지 않는다. 코드 블록은 자체 종결성을 갖기 때문이다.
문을 끝낼 때는 세미콜론을 붙여야 하지만 개발자 입장에서 세미콜론은 옵션이다. 자바스크립트 엔진이 소스코드를 해석할 때 문의 끝이라고 예측되는 지점에 자동으로 세미콜론을 붙여주는 세미콜론 자동 삽입 기능(ASI - Automatin semicolon insertion)이 암묵적으로 수행되기 때문이다.
하지만 이 ASI기능이 기능을 제대로 예측하지 못하는 경우가 있기 때문에 세미콜론을 붙이는 것을 권장한다.
표현식인 문과 표현식이 아닌 문
표현식은 문의 일부일 수도 있고, 그 자체로 문이 될 수도 있다.
var x; // 변수 선언문은 값으로 평가될 수 없기에 표현식이 아니다.
x = 1 + 2; // 할당문이면서 값으로 평가될 수 있는 표현식이다.
표현식인 문과 표현식이 아닌 문을 구별하는 가장 간단한 방법은 변수에 할당해 보는 것이다.
var foo = var x; // SyntaxError
var x
는 값으로 평가될 수 없기 때문에 문이다. 반면 10 + 20
은 값으로 평가될 수 있기 때문에 표현식이다.
var foo = 10 + 20;
참조
- 모던자바스크립트 DeepDive