값(value) 은 Expression(표현식)을 해석하여 생성된 결과를 말한다.
var sum = 10 + 20; // 변수에는 "10 + 20"을 해석한 결과인 숫자 값 "30"이 할당됨
값은 다양한 방법으로 생성할 수 있다.
리터럴(literal) 은 사람이 이해할 수 있는 문자인 알파벳, 숫자, 기호 등을 사용해 값을 생성하는 표기법을 말한다.
리터럴은 정수, 문자열, 객체 리터럴 등의 다양한 종류의 값을 생성할 수 있다.
리터럴 | 예시 |
---|---|
정수 리터럴 | 100 |
부동소수점 리터럴 | 10.5 |
문자열 리터럴 | 'Hello' |
불리언 리터럴 | true, false |
null 리터럴 | null |
undefined 리터럴 | undefined |
객체 리터럴 | { name: 'Lee', address: 'Seoul'} |
배열 리터럴 | [1, 2, 3] |
함수 리터럴 | function() {} |
정규 표현식 리터럴 | /[A-Z]+/g |
Statement 는 프로그램을 구성하는 기본 단위이자 최소 실행 단위이다.
Statement의 집합으로 이루어진 것이 곧 프로그램이다. Statement은 선언문, 할당문, 조건문, 반복문 등으로 구분할 수 있다.
var x; // 변수 선언문
x = 5; // 할당문
function foo () {} // 함수 선언문
if ( x > 1 ) { ... } // 조건문
for (var i = 0 ; i < 2 ; i++) { ... } // 반복문
Expression 은 값으로 평가(evaluate)될 수 있는 모든 Statement을 말한다.
즉, Expression은 값으로 평가되며, 리터럴, 식별자, 연산자, 함수 호출 등의 조합으로 이뤄질 수 있다.
// 리터럴 표현식
10
'Hello'
// 식별자 표현식(선언이 이미 존재한다고 가정)
sum
person.name
arr[1]
// 연산자 표현식
10 + 20
sum = 10
sum !== 10
// 함수/메서드 호출 표현식 (선언은 이미 존재한다고 가정)
square()
person.getName()
Statement(문) ⊃ Expression(표현식)
모든 Expression은 Statement이나, 어떤 Statement는 Expression이 아니다.
표현식인 문은 값으로 평가될 수 있는 문이며, 표현식이 아닌 문은 값으로 평가될 수 없는 문을 말한다.
둘을 명확히 구분하는 방법은 변수에 할당해 보는 것이다. 표현식인 문은 값으로 평가되므로 변수에 할당할 수 있다.
또한 크롬 개발자 도구
에서 표현식이 아닌 문을 실행하면 언제나 undefined를 출력한다.
var x; // 표현식 X
x = 100; // 표현식 O
var foo = 10; // 표현식 X
if (true) {} // 표현식 X
// 변수에 할당해보기!
var foo = var x; // 표현식이 아닌 문은 값처럼 사용할 수 없다.
var foo = x = 100; // 표현식인 문은 값처럼 사용할 수 있다.