-
valueJavaScript/자바스크립트 기본 2023. 11. 16. 21:57
값(value)이란 무엇인가
값(value) = 표현식(expression)이 평가되어(evaluate) 생성된 결과이다.
//10+20이 평가되어 값 30을 생성한다. 10+20 = 30 //변수에는 10+20이 평가되어 생성된 숫자 값 30이 할당된다. var sum = 10 + 20;
리터럴(literal)
이러한 표현식이 평가되어 생성되는 값(value)은 다양한 방법으로 생성할 수 있다.
가장 기본적인 방법은 리터럴(literal)을 사용하는 방법이다.
*literal의 사전적 의미 : 문자 그대로의
리터럴 예시 정수 리터럴 100 문자열 리터럴 'hello' ,"hello" , `hello` 불리언 리터럴 true,false 객체 리터럴 {name:'kim'} .... .... 이렇게 리터럴은 사람이 이해할 수 있는 문자나 기호로 표기한 코드이다.
자바스크립트 엔진은 코드가 실행되는 시점인 런타임에 리터럴을 평가해 값을 생성한다.
표현식(expression)
표현식은 값으로 평가될 수 있는 문(statement)이다.
//리터럴도 값으로 표현되므로 표현식이다. 100 'js' //연산문도 표현식이다. 1+1
따라서 표현식은 값처럼 사용할 수 있다.
이렇게 리터럴 ,식별자, 연산자 등의 값으로 생성될 수 있는 문은 모두 표현식이라고 할수 있다.
문(statement)
문(statement)은 프로그램을 구성하는 기본 단위이자 최소 실행 단위이다.
문은 여러 토큰(token)으로 구성되며, 토큰이란 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미한다.
키워드, 식별자, 연산자, 괄호 등 각각 문법적인 의미를 가지는 것들을 토큰이라고 한다.
문은 컴퓨터에게 명령을 내린다고해서 명령문이라고도 부른다.
문이 실행된다는것은 명령이 실행되고 어떠한 작업을 시킨다는 것과 같다.
문은 명령문,조건문,할당문,반복문 등으로 구분할 수 있다.
표현식인 문과 표현식이 아닌 문
표현식은 "값으로 평가될 수 있는 문"이라고 정의했다.
하지만 모든 문이 값으로 평가될 수 있는 문은 아니다.
var x; x = 1 + 2;
표현식은 문의 일부일 수도 있고 그 자체로 문이 될 수도 있다.
이 뜻은 문이 값으로 평가될 수도 아닐 수도 있다는 의미를 갖는다.
예제를 확인해보면 var x는 값으로 평가 될 수 없으므로 표현식이 아닌 일반적인 문(statement)이다.
하지만 x = 1 + 2는 표현식이면서 완전한 문이기도 하다. 하나의 값으로 취급될 수 있다는 의미이다.
따라서 다음과 같이 사용해도 아무런 문제가 없다.
var y = (x = 1 + 2); console.log(y); //3
그렇다면 표현식인 문과 표현식이 아닌 문을 구별하는 방법은 무엇일까?
가장 간단한 방법은 변수에 할당해보는것이다.
var y = var x; //error
즉 변수에 할당할 수 있는 문은 표현식인 문이고,
변수에 할당할 수 없는 경우 표현식이 아닌 문이라고 볼 수 있다.
하지만 주의해야 할 점은 함수 선언문에서는 다르게 동작한다.
const sum = function sum(a, b) { return a + b; }; console.log(sum(1, 2)); //3
함수를 생성하는 방식 중 하나인 함수 선언문은 일반적인 문(statement)으로 분류된다.
위의 변수 선언문이 변수에 선언되지 못한 것처럼 함수 선언문도 변수에 선언하려고 하면 에러가 발생할 것 같지만
표현식과 같이 변수에 할당되는 것을 볼 수 있다.
이는 자바스크립트 엔진이 코드의 문맥에 따라 동일한 함수를 문이 아닌 표현식으로 해석하는 경우가 있기 때문이다.
자바스크립트에서 함수는 객체에 속한다.
그리고 변수또는 데이터에 담거나 파라미터로 전달하거나 리턴값으로 사용할 수 있는 일급 객체의 조건을 충족한다.
일급 객체이기에 함수를 값처럼 자유롭게 사용하고 변수에 할당할 수 있게된다.
함수에 관련된 더 자세한 내용은 함수파트에서 정리
'JavaScript > 자바스크립트 기본' 카테고리의 다른 글
[객체]프로퍼티-기초 (1) 2023.12.06 [객체]프로퍼티-심화 (0) 2023.12.06 변수var,let,const (1) 2023.11.15 실행 컨텍스트(Execution Context) (0) 2023.05.21 [객체 기초]3.구조 분해 할당(destructuring assignment) (0) 2023.03.23