- 값은 식(표현식,expression)이 평가(evaluate)되어 생성된 결과를 뜻한다.
- 평가란, 식을 해석해서 값을 생성하거나 참조하는 것을 뜻한다.
// 10+20은 평가되어 숫자 값 30을 생성한다
10 + 20; //30
- 리터럴은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법(notation)을 말한다.
- 자바스크립트 엔진은 런타임에 리터럴으르 평가해 값을 생성한다.
- 리터럴은 값을 생성하기 위해 미리 약속한 표기법이다.
- 리터럴을 사용하여 다양한 데이터 타입을 생성할 수 있다.
- 표현식(expression)은 값으로 평가될 수 있는 문(statement)이다.
- 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조한다.
var score = 100;
리터럴 100은 그 자체로 표현식이다.
var score = 50 + 50;
50 + 50은 리터럴과 연산자로 되어있고, 평가되어 100을 생성하므로 표현식이다.
score; //100
식별자 참조는 값으로 평가되므로 표현식이다.
//리터럴 표현식
10
'hello'
//식별자 표현식(선언이 이미 존재한다고 가정)
sum
person.name
arr[1]
//연산자 표현식
10+20
sum = 10
sum != 10
//함수/메서드 호출 표현식(선언이 이미 존재한다고 가정)
square()
person.getName()
- 프로그램을 구성하는 기본 단위이자 최소 실행 단위
- 명령문 이라고도 부른다.
- 문의 기본요소 : 토큰
- 토큰: 키워드, 식별자, 연산자, 리터럴 등 문법적 의미를 가지며 문법적으로 더이상 나눌 수 없는 코드의 기본 요소
- 선언문, 할당문, 조건문, 반목문 등
//변수 선언문
var x;
//할당문
x =5;
// 함수 선언문
function foo(){}
//조건문
if (x>1) {
console.log(x);
}
//반복문
for (var =0; i<2; i++){
console.log(i);
}
- 문의 종료를 나타내는 ;(세미콜콜론)
- 단, 코드블록({...}) 뒤에는 세미콜론을 붙이지 않는다. 코드블록이 가지는 자체종결성 때문.
- 세미콜론은 생략 가능
- 자바스크립트 엔진이 '세미콜론 자동 삽입 기능(ASI)'을 가지고 있기 때문이다.
- 그러나 그 동작과 개발자의 예측이 일치하지 않는 경우가 있음
- 세미콜론 사용을 권장
- 표현식인 문: 값으로 평가될 수 있는 문
- 표현식이 아닌 문: 값으로 평가될 수 없는 문 => 구별 방법: 변수에 할당해보는 것
//변수 선언문, 표현식이 아님
var x;
//할당문
//1,2,1+2,x=1+2 모두 평가될 수 있으므로 표현식
x= 1+2;
var foo = var x; // SyntanxError
표현식이 아닌 문은 값(변수 선언문)처럼 사용될 수 없다.
var x;
x= 100;
var foo = x= 100;
console.log(foo); //100
할당문은 표현식이므로 값으로 평가된다. 그러므로 할당문을 값처럼 변수에 할당할 수 있다.
⚠ 완료 값(completion value)
- 크롬 개발자 도구에서, 표현식이 아닌 문을 실행하면 언제나 undefined를 출력한다.
- 완료값인 undefined는 표현식의 평과 결과가 아니므로 다른 값과 같이 변수에 할당할 수 없고 참조할 수도 없다.