
위 사진처럼 크롬 콘솔창에서 명령어들을 입력 하다보면 undefined가 계속해서 출력되는 현상을 본 경험이 있을 것이다.
위 현상을 이해하기 위해서는 자바스크립트에서 표현식과 문에 대하여 이해하여야 한다.
문이란 프로그램을 구성하는 기본 단위이자 실행 단위로, 명령문이라고도 부른다. 조건문 , 선언문 , 반복문 등등 문을 실행하면 해당 프로그램에서 명령이 실행된다.
표현식이란 값으로 평가될 수 있는 문을 말한다. 예를 들어 이라는 수식에서 1+2와 3은 동치이므로 1+2는 3으로 표현될 수 있다는 말과 비슷하다.
<값으로 평가될 수 있는 문들>
1+2 // 3
a=1 // 1
b = [1,2,3] // [1,2,3]
b[1] // 2
표현식이 값으로 평가될 수 있는 문이므로 표현식이 아니라는 뜻은 값으로 평가될 수 없다는 뜻이다.
다음과 같은 코드들은 값으로 평가될 수 없다. 그리고 이러한 문들은 변수에 직접 대입해 봄으로써 판단할 수 있다. 값으로 평가될 수 없기 때문에 변수에 할당할 수 없기 때문이다.
<값으로 평가될 수 없는 문들>
var a;
var a = 10;
// 표현식이 아닌 문들은 할당할 수 없다.
var b = var a; // Unexpected token 'var'
표현식은 값으로 평가될 수 있는 문이라고 하였다. 크롬의 콘솔창에서는 표현식의 평가된 값을 반환하기 때문에 표현식이 아닌 문을 실행하였을 때 undefined를 반환한 것이다.

