표현식과 문
1. 값
값value
은 식(표현식)expression
이 평가되어 생성된 결과를 말한다.
모든 값은 데이터 타입을 가지며, 메모리에 2진수, 즉 비트의 나열로 저장된다.
변수는 하나의 값을 저장하기 위해 확보한 메모리 공간을 식별하기 위해 붙인 이름이다.
expression
2. 표현식표현식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
들은 모두 값으로 평가되고, 표현식이다.
이처럼 표현식은 리터럴, 식별자(변수, 함수 등) 연산자, 함수호출 등의 조합으로 이뤄질 수 있다.
즉 값으로 평가될 수 있는 문은 모두 표현식이다.
이것은 문법적으로 값이 위치할 수 있는 자리에는 표현식도 위치할 수 있다는 것을 의미한다.
statement
3. 문문은 프로그램을 구성하는 기본 단위이자 최소 실행 단위이다.
문의 집합으로 이뤄진 것이 프로그램이다.
문은 여러 토큰으로 구성된다.
토큰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;
은 표현식이다.
따라서 할당문은 값처럼 사용할 수 있다.