본문 바로가기

JavaScript/JS 기초

JavaScript 값, 리터럴, 표현식, 문

값, 리터럴, 표현식, 문

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

이게 무슨 말인고 하니.. 우리가 javascript에서 변수를 선언하고 데이터를 할당하면 메모리에 저장된다. 이렇게 할당 된 값은 메모리에 2진수(문자 'A'는 0100 0001)로 저장된다. 이렇게 메모리에 저장된 것을 값이라고 부를 수 있다.

var expressionValue = 10 + 20;
var literalValue = 30;

여기서 변수 expressionValue에 할당 된 값, 즉 메모리에 저장 된 값은 10+20이 아닌 10+20을 평가(≒계산)한 30이다.
expressionValue와 literalValue 둘 다 값 30이 할당된다. expressionValue의 10+20을 표현식expression, literalValue의 30은 리터럴literal이라고 부른다.

리터럴

리터럴literal은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법을 말한다.

역시 정의만 보니 무슨 말인지 잘 모르겠다... 다시 앞을 보자. 앞서 var literalValue = 30;을 살펴보면 literalValue에 30이란 값을 할당했고, 이 30은 그대로 메모리에 들어갔다. 쉽게 풀어보자면 "값을 생성하기 위해 미리 약속한 표기법"이라고 볼 수 있다. 예시를 살펴보자.

var 정수_리터럴 = 100;
var 부동소수점_리터럴 = 10.5;

var 2진수_리터럴 = 0b0100001;
var 8진수_리터럴 = 0o101;
var 16진수_리터럴 = 0x41;

var 문자열_리터럴 = 'Hello';

var 불리언_리터럴 = true; // 또는 false

var null_리터럴 = null;
var undefined_리터럴 = undefined;

var 객체_리터럴 = { name: 'Lee', address: 'Seoul' }
var 배열_리터럴 = [ 1, 2, 3 ];
var 함수_리터럴 = function() {}

var 정규표현식_리터럴 = /[A-Z]+/g;

표현식

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

표현식은 어? 이거 "값"이다!라고 말할 수 있는 모든 걸 얘기한다. 앞서 값이란 메모리에 저장된 것이라고 봤는데, 표현식이란 메모리에 저장될 수 있는 것들을 이야기한다고 볼 수 있다. 즉, 값으로 평가될 수 있는 건 모두 표현식이다. 따라서 앞서 봤던 리터럴도 표현식이라고 이야기할 수 있다.

// 리터럴 표현식
10
'Hi'

// 식별자 표현식(앞서 선언했다고 가정)
sum
person.name
arr[1]

// 연산자 표현식
10 + 20
sum = 10
sum !== 10

//식별자 참조
sum;

// 함수/메서드 호출 표현식(앞서 선언했다고 가정)
square()
person.getName()

문(statement)은 프로그램을 구성하는 기본 단위이자 최소 실행 단위이다.
문의 집합으로 이뤄진 것이 프로그램이며, 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍이다.

문은 명령문이라고도 부르는데, 문이 실행되면 컴퓨터에 명령을 내려 일을 시키기 때문이다. 마찬가지로 예시를 보면 쉽게 이해할 수 있다.

// 변수 선언문
var x;

// 할당문
x = 3;

// 함수 선언문
function foo () {}

// 조건문
if ( ... ) { alert(x); }

// 반복문
for (var i = 0; i < 10; i++) { alert(i); }

표현식인 문과 표현식이 아닌 문 statement, expression

표현식과 문은 비슷해서 구별하기 어렵다고 느낄 수 있지만 구분 법이 있다. 바로 변수에 할당해보는 것이다.
표현식은 값이다. 값은 변수에 할당할 수 있다. 하지만 표현식이 아닌 문은 변수에 할당하면 에러가 발생한다.


반응형

'JavaScript > JS 기초' 카테고리의 다른 글

JavaScript 단축 평가  (0) 2021.08.29
JavaScript 암묵적 타입 변환과 명시적 타입 변환  (0) 2021.08.29
javascript session접근하기(SessionStorage)  (0) 2021.03.19
브라우저 구조  (0) 2021.03.04
WEB APIs란?  (0) 2021.03.04