1 + 1 = 2
와 같이 식이 평가되어 생성된 결과 를 값
이라고 한다. 평가는 + 기호니까 덧셈으로 연산해야돼
처럼 약속된 방식으로 해석하는 것을 의미한다.
표현식
이란 값으로 평가될 수 있는 명령문을 의미한다.
즉, 어떤 값을 도출해낼 수 있으면 모두 표현식이라고 할 수 있다.
기본적으로 리터럴은 모두 표현식이다. 값을 참조하는 것도 표현식이다.
리터럴
100 이라는 아라비아 숫자는 JS에서 숫자 리터럴로 본다. 즉, 사람이 쉽게 알아 볼 수 있는 형태로 표시된 방법이다.
- 숫자, 문자, 객체, 함수, 배열, 부동소수점, 불리언, null, undefined 등등 모든 형태의 데이터는 리터럴이다.
- JS 엔진은 런타임 때, 리터럴을 평가해 값을 생성한다.
JS에서는 런타임 시 연산이 이루어지기 때문에 1 + 1
과 같은 식도 표현식이라고 할 수 있다. 왜냐하면 연산 후 2
라는 값을 도출하기 때문이다.
// 리터럴 표현식
10;
'joo';
// 식별자 표현식
number;
// 연산자 표현식
1 + 1;
// 함수&메서드 표현식
func();
따라서 문법적으로 값이 있을 수 있는 위치에는 표현식도 있을 수 있다.
개발자는 코드를 작성해 원하는 동작을 컴퓨터가 수행할 수 있도록 코드를 작성하는데, 코드의 최소 실행 단위인 명령문이 모여 하나의 프로그램을 완성한다.
// 선언문
var number;
// 할당문
number = 1;
// 함수 선언문
function foo() {}
// 반복문
for (var i=0; i<2; i++) { console.log(i); }
// 조건문
if (true) { console.log('hi'); }
number
라는 변수를 선언하는 것도 하나의 명령문이고, number
에 1
을 할당하는 것도 명령문이다.
세미콜론(;)
은 명령문의 종료를 의미한다. 일반적으로 모든 명령문에는 필요하지만 함수와 반복문 등에 사용하는 코드 블럭 {}
은 그 자체로 종료의 의미를 가지고 있어 필요없다.
또한, JS는 자동 세미콜론 삽입(ASI) 기능이 존재해 세미콜론을 작성하지 않아도 알아서 명령문을 구분하고 처리한다. 하지만 개발자의 의도와 다르게 명령문의 끝을 잘못 판단하는 경우가 있을 수 있기 때문에 확실하게 명령문을 끝맺어 주는 것이 좋다.
모든 표현식은 하나의 명령문이지만, 모든 명령문이 표현식은 아니다.
var number;
number
라는 변수 선언문은 런타임 시 값을 평가하는 단계가 아니기 때문에 표현식이라고 할 수 없다. 하지만 값을 할당하는 것은 표현식이라고 할 수 있다.
표현식인지 구분하는 방법은 표현식을 출력했을 때 값으로 나올 수 있는지를 파악하면 쉽다.
개발자 도구에(F12)에서 각가의 명령문을 실행했을 때 밑에 undefined
가 나왔다면 해당 명령문은 표현식이 아니라는 것을 쉽게 알 수 있다.