//10 +20은 평가되어 숫자 값 30을 생성한다.
10+20; //30
변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하 위해 붙인 이름이라고 했다. 따라서 변수에 할당되는 것은 값이다.
//변수에는 10+20이 평가되어 생성된 숫가 값 30이 할당된다.
var sum= 10+20;
🤔값은 다양한 방법으로 생성할 수 있다. 위 예제처럼 식으로 생성할 수도 있지만 가장 기본적인 방법은 리터럴을 사용하는 것이다.
//숫자 리터럴 3
3
이처럼 리터럴은 사람이 이해할 수 있는 문자 또는 미리 약속된 기호로 표기한 코드다. 자바스크립트 엔진은 코드가 실행되는 시점인 런타임에 리터럴을 평가해 값을 생성한다. 즉, 리터럴은 값을 생성하기 위해 미리 약속한 표기법이라고 할 수 있다.
리터럴 | 예시 | 비고 |
---|---|---|
정수 리터럴 | 100 | |
부동소수점 리터럴 | 10.5 | |
문자열 리터럴 | 'hello' | |
불리언 리터럴 | true, false | |
null 리터럴 | null | |
undefiend 리터럴 | undefiend | |
객체 리터럴 | {name:'han' address:'seoul' | |
배열 리터럴 | [1,2,3] | |
함수 리터럴 | function(){} | |
정규 표현식 리터럴 | /[A-Z]+/g |
var score =100;
score; //->100
변수 식별자를 참조하면 변수 값으로 평가된다. 식별자 참조는 값을 생성하지는 않지만 값으로 평가되므로 표현식이다. 이처럼 표현식은 리터럴, 식별자(변수, 함수 등의 이름), 연산자, 함수 호출 등의 조합으로 이뤄질 수 있다. 다음과 같이 다양한 표현식이 있지만 값으로 평가된다는 점에서 모두 동일하다. 즉, 값으로 평가될 수 있는 문은 모두 표현식이다.
//리터럴 표현식
10
'HELLO'
//식별자 표현식(선언이 이미 존재한다고 가정)
sum
person.name
arr[1]
//연산자 표현식
10+10;
sum=10;
sum !== 10;
//함수/메서드 호출 표현식(선언이 이미 존재한다고 가정)
square()
person.getName()
앞으로 자바스크립트를 설명할 때 "문statement" 과 표현식"expression"이라는 용어가 자주 등장할 것이더. 문과 표현식을 구별하고 해석할 수 있다면 자바스크립트 엔진의 입장에서 코드를 읽을 수 있고 실행 결과를 예측하는 데 도움이 된다.
문의 집합으로 이뤄진 것이 바로 프로그램이며, 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍이다. 문은 여러 토큰으로 구성된다. 토큰 이라 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미한다. 예를 들어, 키워드, 식별자, 연산자, 리터럴, 세미콜론(;)이나 마침표(.)등의 특수 기호는 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소이므로 모두 토큰이다.
문을 명령문이라고도 부른다. 즉, 문은 컴퓨터에서 내리는 명령어다. 문이 실행되면 명령이 실행되고 무슨 일인가자 일어나게 된다.
문은 선언문, 할당문, 조건문, 반복문 등으로 구분할 수 있다. 변순 선언문을 실행하면 변수가 선언되고, 할당 문을 실행하면 값이 할당된다. 조건문을 실행하면 지정한 조건에 따라 실행할 코드 블록({...})이 결정되어 실행되고, 반복문을 실행하면 특정 코드 블록이 반복 실행된다.
//변수 선언문
var x;
//할당문
x=5;
//함수 선언문
function foo(){}
//조건문
if(x >1){
console.log(x);
}
//반복문
for(var i=0; i<2; i++){
console.log(i);
}
세미콜론(;)은 문의 종료를 나타낸다. 즉, 자바스크립트 엔진은 세미콜론으로 문이 종료한 위치를 파악하고 순차적으로 하나씩 문을 실행한다. 따라서 문을 끝낼 때는 세미콜론을 붙여야 한다. 단, 0개 이상의 문을 중괄호로 묶은 코드 블록({...}) 뒤에는 세미콜론을 붙이지 않는다. 예를 들어, if문, for문, 함수 등의 코드 블록 뒤에는 세미콜론을 붙이지 않는다. 이러한 코드 블록은 언제나 문의 종료를 의미하는 자체 종결성을 갖기 때문이다.
//변수 선언문은 값으로 평가될 수 없으므로 표현식이 아니다.
var x;
//1 ,2, 1+ 2, x= 1+2 모두 표현식이다.
//x= 1+2는 표현식이면서 완전한 문이기도 하다.
x=1+2
표현식인 문은 값으로 평가되므로 변수에 할당할 수 있다. 하지만 표현식이 아닌 문은 값으로 평가할 수 없으므로 변수에 할당하면 에러가 발생한다.
//표현식이 아닌 문은 값처럼 사용할 수 없다.
var foo= var x; //error
😢위 코드의 경우 변수 선언문은 표현식이 아닌 문이다. 다시 말해 값으로 평가될 수 없다. 따라서 변수 선언문은 값처럼 사용할 수 없다.
//변수 선언문은 표현식이 아닌 문이다.
var x;
//할당문은 그 자체가 표현식이지만 완전한 문이기도 하다. 즉 할당문은 표현식이 문이다.
x=100;
이에 반해 위 코드의 할당문 x=100은 그 자체가 표현식이다. 즉, 할당문은 표현식이 문이기 때문에 값처럼 사용할 수 있다.
//표현식은 문은 값처럼 사용할 수 있다.
var foo = x= 100;
console.log(foo); //100
할당문을 값처럼 변수에 할당했다. 표현식인 문인 할당문은 할당한 값으로 평가된다. 즉, x=100은 x변수에 할당한 값 100으로 평가된다. 따라서 foo변수에는 100이 할당된다.