자바스크립트 - 문장 & 표현식

준성·2023년 10월 27일
0
post-thumbnail

자바스크립트의 다양한 문법들이 있다. 그 중 문장표현식 이 있다. 각각 영어로는 statementsexpressions 라고 부른다.

문장표현식 에 대해 알아보자

문장 (statements)


우리가 작성하는 자바스크립트 코드는 모두 문장과 표현식 으로 구성되어 있다.

자바스크립트에서 문장은 어떤 동작이 일어나도록 작성된 최소한의 코드 덩어리를 가리킨다.

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);
}

이렇듯 선언문, 할당문, 조건문, 반복문 .. 등등 끝에 문이라고 붙은 이유가 모든 동작을 수행하는 문장이기 때문이다.

표현식 (expressions)


표현식은 결과적으로 하나의 값이 되는 모든 코드를 가리킨다.

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

할당연산자 자체가 할당한 값을 그대로 리턴하는 특징이 있기에 연산 자체로 값이 되는 표현식이기도 하다.

하지만 할당식은 왼쪽에 있는 피연산자에 오른쪽 피연산자 값을 할당하는 동작을 하기 때문에 문장이 될 수도 있다.

함수 호출도 함수를 호출한 자리가 결국엔 하나의 리턴하는 값을 가지기 때문에 표현식이라고 할 수도 있지만 함수 내부에 정의한 코드를 실행하는 동작이기에 문장이 되기도 한다

표현식인 문장 vs 표현식이 아닌 문장


문장은 다시 표현식인 문장과, 표현식이 아닌 문장으로 나눌 수 있다.

이 둘을 구분하는 가장 간단한 방법은 우리가 구분하고자 하는 문장을 변수에 할당하거나, 어떤 함수의 아규먼트로 확인할 수 있다.

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가 발생하게 되는데

조건문이나 반복문은 값으로 평가되지 않고 오로지 문장으로만 평가되기 때문이다.

profile
코드를 그리다.

0개의 댓글

관련 채용 정보