값(value)은 식(표현식/expression)이 평가되어 생성된 결과를 말한다.
// 변수 sum에 10 + 20이 평가되어 값 30이 할당된다.
let sum = 10 + 20;
리터럴(literal)은 사람이 이해할 수 있는 문자(아라비아 숫자, 알파벳, 한글 등) 또는 약속된 기호('', . , [ ], { }, / / 등 )를 사용해 값을 생성하는 표기법(notation)을 말한다.
자바스크립트 엔진은 코드가 실행되는 시점인 런타임(runtime)에 리터럴을 평가해 값을생성한다. 즉, 리터럴은 값을 생성하기 위해 미리 약속한 표기법이라고 할 수 있다.
100 // 정수리터럴
10.5 // 부동소수 리터럴
0b01000001 // 2진수 리터럴, 0b로 시작
0o101 // 8진수 리터럴, ES6에서 도입. 0o로 시작
0x41 // 16진수 리터럴, ES6에서 도입. 0x로 시작
'hello', "world" // 문자열 리터럴
true, false // 불리언 리터럴
null // null리터럴
undefined // undefined리터럴
{ name: 'yang', mbti: 'INFP' } // 객체 리터럴
[ a, b, c ] // 배열 리터럴
function() {} // 함수 리터럴
/[A-Z]+/g // 정규 표현식 리터럴
표현식(expression)은 값으로 평가될 수 있는 문(statement)이다. 즉 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조한다.
let score = 20; // 20은 리터럴이자 값이다
let score2 = 10+30; // 리터럴과 연산자로 이루어짐. 값 40을 생성
score; // 값 20
score1; // 값 40
표현식은 리터럴, 식별자(변수, 함수 등의 이름), 연산자, 함수 호출 등의 조합으로 이루어질 수 있다.
let sum = function (number) {
return number + 5;
}
// 함수 sum 은 10으로 평가된다.
sum(5)+5; // 15
문(statement)은 프로그램을 구성하는 기본 단위이자 최소 실행 단위다.
문은 여러 토큰(token)으로 구성된다.
토큰(token)은 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미한다.
let sum = 5 + 5;
// 키워드 let, 식별자 sum, 연산자 =, 리터럴 5, ;
// 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소이므로 모두 토큰이다.
문은 명령문이라고도 부른다, 문은 컴퓨터에 내리는 명령이다.
문은 선언문, 할당문, 조건문, 반복문 등으로 구분할 수 있다.
//변수 선언문
let a;
//할당문
a = 10;
//함수 선언문
function abc () {}
//조건문
if ( a > 1 ) { console.log(a); }
//반목문
for( let i = 0; i < 2; i++ ) { console.log(i); }
문(statement)에 대해서 공부를 하면서 통용되는 것이 많아 이것이 저것 같고 저것이 이것 같은 경우가 있어 조금 헷갈리는 부분이 있다.
정리하자면...
- 문(statement)는 프로그램을 구성하는 (기본/최소 실행) 단위, 명령문이라고도 하며 token(문법적으로 더이상 나눌 수 없는 코드의 기본 요소)으로 구성되어있다.
- 선언문 할당문 조건문 반복문 등으로 구분 가능하다.
- 표현식(expression)은 값으로 평가되는 모든 문을 표현식이라고 한다. 표현식은 값처럼 사용할 수도 있다.
- 세미콜론은 문의 종료를 나태내며 코드블록은 자체 종결성을 가져 뒤에 세미콜론을 붙이지 않는다.
- 자바스크립트는 문의 끝에 세미콜론을 생략 가능하지만 권장하지 않는다.
참고: 모던 자바스크림트 Deep Dive