값
식이 평가되어 생성된 결과
10+20 은 식이고, 결과인 30은 값이다.
변수에 할당 되는 것, 될 수 있는 것은 값이다.
리터럴
사람이 이해할 수 있는 문자, 또는 약속된 기호를 사용해 값을 생성하는 표기법
3 //숫자 리터럴 3
숫자 리터럴 3을 코드에 작성하면, 자바스크립트 엔진은 이를 평가해 숫자값 3을 생성한다.
자바스크립트 엔진은 런타임에 리터럴을 평가하여 값을 생성한다.
정수리터럴 | 100 |
---|---|
부동소수점 리터럴 | 10.5 |
2진수 리터럴 | 0b010001 |
8진수 리터럴 | 0o101 |
16진수 리터럴 | 0x41 |
문자열 리터럴 | ‘hi’ |
불리언 리터럴 | true, false |
null 리터럴 | null |
undefined 리터럴 | undefined |
객체 리터럴 | {name:”hi”, age:1} |
배열 리터럴 | [1,2,3] |
정규 표현식 리터럴 | /[A-Z]+/g |
표현식
값으로 평가될 수 있는 문
표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조한다.
리터럴은 값으로 평가되므로, 리터럴도 표현식임
변수 값할당, 값 참조, 리터럴, 식별자, 연산자표현식, 함수 호출 등의 표현식이 존재함
⇒ 모두 값으로 평가될 수 있음
'hi'=='hello'
이 역시 어떤 값으로 평가되므로, 표현식임
표현식과 평가된 값은 동치이다.
문
프로그램을 구성하는 기본 단위이자, 최소 실행단위
문은 여러 토큰으로 구성됨
토큰
문법적 의미를 가지며, 더이상 나눌 수 없는 최소단위
var sum=1+2;
var, sum, =, 1,+, 2, ;모두 토큰임
문의 종류
선언문, 할당문, 조건문, 반복문
문의 종료
;(세미콜론)은 문의 종료를 나타낸다.
문을 끝낼때는 세미콜론을 붙여야 한다.
단, 코드블록({})뒤에는 붙이지 않는다. 코드 블록은 언제나 문의 종료를 의미하는 자체 종결성을 갖기 때문이다.
세미콜론은 옵션?
문의 끝에 붙이는 세미콜론은 옵션이다. 즉, 생략이 가능하다.
자바스크립트 엔진이 소스코드를 해석할 때 문의 끝이라고 예측되는 지점에 세미콜론을 자동으로 붙여주는 세미콜론 자동 삽입 기능(ASI)이 암묵적으로 수행되기 때문이다.
다만, 이런 ASI와 개발자의 예측이 다른 경우가 존재할 수 있는데, 이 경우에는 반드시 붙여줘야 한다.
function foo(){
return
{}
}
console.log(foo()); //undefined
우리는 {}이 return 될것이라 예측했으나 자바스크립트 엔진은 return; {};으로 해석하여 return되지 않는다.
표현식인 문과 표현식이 아닌 문
표현식은 문의 일부일 수 있고, 그자체로 문이 될 수도 있다.
var x;
x=1+2;
변수 선언문은 값으로 평가되지 않으므로 표현식이 아니다.
x=1+2는 표현식이면서, 문이기도 하다.
표현식은 값을 생성하거나, 값으로 평가된다. 값으로 평가되지 않는 문은 표현식이 아니다.
표현식인 문과 표현식이 아닌 문을 구분하는 법은 변수에 할당해보는 것이다.
예를들어, 이런게 있다.
var foo = var x;
완료값
크롬 개발자 도구에서 표현식이 아닌 문을 실행하면 언제나 undefined를 출력한다.
var x=10;
// undefined
x=10;
// 10
if(true){}
//undefined
function foo(){}
//undefined
x=foo();
//undefined -> 함수는 값이 아니므로 표현식이 아니다?