front-end/JavaScript

[JavaScript] 표현식과 문

Ash_O 2023. 4. 4. 01:00

값 : 표현식이 평가되어 생성된 결과

평가 : 식을 해석해서 값을 생성하거나 참조하는 것

 

모든 값은 데이터 타입을 가지고, 메모리에 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