표현식과 문

1. 값

value 은 식(표현식)expression 이 평가되어 생성된 결과를 말한다.

모든 값은 데이터 타입을 가지며, 메모리에 2진수, 즉 비트의 나열로 저장된다.

변수는 하나의 값을 저장하기 위해 확보한 메모리 공간을 식별하기 위해 붙인 이름이다.

2. 표현식expression

표현식expression 은 값으로 평가될 수 있는 문statement 이다.

let score = 100; // 정수 리터럴
let score = 50 + 50; // 리터럴 + 연산자
score; // 100

// 리터럴 표현식
10;
('Hello');
// 식별자 표현식
sum;
person.name;
arr[1];
// 연산자 표현식
10 + 20;
sum = 10;
sum !== 10;
// 함수 / 메서드 호출 표현식
square();
perseon.getName();

위 예제의 각 문statement들은 모두 값으로 평가되고, 표현식이다.

이처럼 표현식은 리터럴, 식별자(변수, 함수 등) 연산자, 함수호출 등의 조합으로 이뤄질 수 있다.

즉 값으로 평가될 수 있는 문은 모두 표현식이다.

이것은 문법적으로 값이 위치할 수 있는 자리에는 표현식도 위치할 수 있다는 것을 의미한다.

3. 문statement

문은 프로그램을 구성하는 기본 단위이자 최소 실행 단위이다.

문의 집합으로 이뤄진 것이 프로그램이다.

문은 여러 토큰으로 구성된다.

토큰token 이란 문법적으로 더 이상 나눌 수 없는 코드의 기본요소 이다.

let sum = 1 + 2;

statement: let sum = 1 + 2;

token : let, sum, =, 1, +, 2, ;

// 변수 선언문
let x;
// 할당문
x = 5;
// 함수 선언문
function foo() {}
// 조건문
if (x > 1) {
  console.log(x);
}
// 반복문
for (let i = 0; i < 2; i++) {
  console.log(i);
}

4. 세미콜론

세미콜론; 은 문의 종료를 나타낸다.

문을 끝낼 때는 세미콜론을 붙여야한다.

단, 코드 블록 { … } 뒤에는 세미콜론을 붙이지 않는다.

5. 표현식인 문과 표현식이 아닌 문

// 변수 선언문은 값으로 평가될 수 없으므로 표현식이 아니다.
let x;
let a;
// 1, 2, 1+2, x = 1+2는 모두 표현식이다.
// x = 1 + 2는 표현식이면서 문이다.
x = 1 + 2;
a = x = 1 + 2;

표현식인 문과 표현식이 아닌 문을 구별하는 가장 간단한 방법은 변수에 할당해 보는 것이다.

let foo = let x; // syntax Error
let a;
let foo2 = a = 100; // 100

위 변수 선언문 let x; 은 표현식이 아닌 문이다.

다시말해 값으로 평가될 수 없다.

따라서 변수 선언문은 값처럼 사용할 수 없다.

위 할당문 a = 100; 은 표현식이다.

따라서 할당문은 값처럼 사용할 수 있다.

6. 한줄 요약

표현식은 값으로 평가될 수 있는 문이다.