[JavaScript] 표현식과 문
값
값 : 표현식이 평가되어 생성된 결과
평가 : 식을 해석해서 값을 생성하거나 참조하는 것
모든 값은 데이터 타입을 가지고, 메모리에 2진수 나열로 저장된다.
메모리에 저장된 값은 데이터 타입에 따라 다르게 해석될 수 있다.
[0100 0001] -> 65, 'A'
값은 다양한 방법으로 생성할 수 있는데, 그 중 가장 기본적인 방법은 리터럴을 사용하는 것이다.
리터럴
리터럴은 사람이 이해할 수 있는 문자나 약속된 기호로 값을 생성하는 표기법이다.
사람이 이해할 수 있는 문자 등을 코드에 작성하면 자바스크립트 엔진이 코드를 평가해서 그 값을 생성한다
즉, 자바스크립트 엔진은 런타임에 리터럴을 평가해서 값을 생성한다.
문 (statement)
문이란 프로그램을 구성하는 기본 단위이자 최소 실행 단위이다.
문으로 컴퓨터에 명령을 내릴 수 있다.
프로그램이란 문의 집합으로 이뤄졌다고 할 수 있으며,
프로그램을 만들기 위해 문을 작성하고 순서에 맞게 나열하는 것을 프로그래밍이라고 한다
// 변수 선언문
var x;
// 할당문
x = 5;
// 함수 선언문
function foo() {}
// 조건문
if(x>1) {console.log(x);}
// 반복문
for(var i=0; i<2; i++) {console.log(i);}
표현식
표현식 : 값으로 평가될 수 있는 문
표현식이 평가되면 새로운 값을 생성하거나 기존에 있던 값을 참조한다
그래서 리터럴은 표현식이라고 할 수 있다.
let a = 1;
let b = 2 * 3;
a;
위 세 줄은 모두 표현식이다
표현식은 리터럴, 식별자, 연산자, 함수 호출의 조합으로 구성된다
// 표현식
// 리터럴
10
'jay'
// 식별자
money
person.age
arr[0]
// 연산자
10 + 20
sum = 10
sum !== 10
// 함수, 메서드 호출
add()
person.getName()
또한, 표현식은 다른 표현식의 일부가 되어서 새로운 값을 만들어낼 수 있다
var a = 100+20;
var b = a + 30;
a-80;
표현식인 문과 표현식이 아닌 문
표현식은 문의 일부일 수도 있고 그 자체로 문이 될 수도 있다.
문에는 표현식인 문과 표현식이 아닌 문이 있다.
표현식인 문 : 값으로 평가될 수 있는 문
표현식이 아닌 문 : 값으로 평가될 수 없는 문
var x;
x = 1 + 2;
변수 선언문의 경우 값으로 평가될 수 없다. 그러므로 표현식이 아닌 문이다.
반면, (1, 2, 1+2, x = 1+2) 는 모두 값으로 평가될 수 있다.
따라서 모두 표현식이다
더불어 x = 1+2의 경우 표현식이면서 완전한 문이다
표현식인 문과 표현식이 아닌 문을 구별하는 가장 간단한 방법은 변수에 할당해 보는 것
표현식인 문은 값으로 평가되어서 변수에 할당할 수 있지만,
표현식이 아닌 문은 값으로 평가가 되지 않아서 변수에 할당하면 에러가 생긴다
var foo = var x; // 표현식이 아니다. var x 가 값으로 할당될 수 없다
var x ; // 표현식이 아니다
x = 100;
var foo = x = 100;
console.log(foo); // 100
// x=100이 값으로 평가되어서 foo에 할당될 수 있다.
참고자료
자바스크립트 deepdive