자바스크립트의 다양한 문법들이 있다. 그 중 문장
과 표현식
이 있다. 각각 영어로는 statements
와 expressions
라고 부른다.
문장
과 표현식
에 대해 알아보자
우리가 작성하는 자바스크립트 코드는 모두 문장과 표현식
으로 구성되어 있다.
자바스크립트에서 문장은 어떤 동작이 일어나도록 작성된 최소한의 코드 덩어리를 가리킨다.
let x; // 변수를 선언하는 동작이 일어나는 하나의 문장
x = 3; // x에 3이라는 값을 할당하는 동작이 일어나는 문장
if (x < 5){ // 조건을 걸어 동작하게 되는 문장
console.log('x는 5보다 작다');
}else{
console.log('x는 5와 같거나 크다');
}
for (let i = 0; i < 5; i++){ // 반복하게 동작되는 문장
console.log(i);
}
이렇듯 선언문, 할당문, 조건문, 반복문 .. 등등 끝에 문이라고 붙은 이유가 모든 동작을 수행하는 문장이기 때문이다.
표현식은 결과적으로 하나의 값이 되는 모든 코드
를 가리킨다.
5 // 5
'string' // string
// 어떤 하나의 값을 그대로 작성해도 표현식이라한다.
// ------------------------------------------
5 + 7 // 12
'I' + ' Love ' + 'Seoul' // I Love Seoul
true && null // null
// 연산자를 이용한 연산식도 한의 값이 되니 표현식이라한다.
// ------------------------------------------
const title = 'JavaScript';
const obj = {
name: 'Jun'
};
const numbers = [1, 2, 3];
// 선언된 변수를 호출하거나, 객체의 프로퍼티에 접근하는 것도 결국 하나의 값으로 평가된다.
// 그렇기에 길이와 상관없이 결과적으로 하나의 값이 되는 코드를 모두 표현식이라고 할 수 있다.
typeof obj // object
title // JavaScript
obj.name // Jun
numbers[3] // undefined
표현식은 보통 문장의 일부로 쓰이지만, 그 자체로 문장일 수도 있다. 대표적인 예시가 할당식과 함수 호출이다.
// 할당 연산자는 값을 할당하는 동작도 하지만, 할당한 값을 그대로 가지는 표현식이다.
title = 'JavaScript'; // JavaScript
// 함수 호출은 함수를 실행하는 동작도 하지만, 실행한 함수의 리턴 값을 가지는 표현식이다.
sayHi(); // sayHi 함수의 리턴 값
// console.log 메소드는 콘솔에 아규먼트를 출력하는 동작도 하지만, undefined 값을 가지는 표현식이다.
console.log('hi'); // undefined
할당연산자 자체가 할당한 값을 그대로 리턴하는 특징이 있기에 연산 자체로 값이 되는 표현식이기도 하다.
하지만 할당식은 왼쪽에 있는 피연산자에 오른쪽 피연산자 값을 할당하는 동작을 하기 때문에 문장이 될 수도 있다.
함수 호출도 함수를 호출한 자리가 결국엔 하나의 리턴하는 값을 가지기 때문에 표현식이라고 할 수도 있지만 함수 내부에 정의한 코드를 실행하는 동작이기에 문장이 되기도 한다
문장은 다시 표현식인 문장과, 표현식이 아닌 문장으로 나눌 수 있다.
이 둘을 구분하는 가장 간단한 방법은 우리가 구분하고자 하는 문장을 변수에 할당하거나, 어떤 함수의 아규먼트로 확인할 수 있다.
let x;
x = 3;
console.log(if (x < 5) {
console.log('x는 5보다 작다');
} else {
console.log('x는 5보다 크다');
});
const someloop = for (let i = 0; i < 5; i++) {
console.log(i);
};
console.log
메서드의 아규먼트로 if문을 전달하거나 someloop
라는 변수에 for 반복문을 할당하게 되면, Error가 발생하게 되는데
조건문이나 반복문은 값으로 평가되지 않고 오로지 문장으로만 평가되기 때문이다.