식(표현식: expression)이 평가(evaluate)되어 생성된 결과
모든 값은 데이터 타입을 가지며, 메모리에 2진수(비트의 나열)로 저장됨
변수: 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 혹은 그 메모리 공간을 식별하기 위해 붙인 이름
⇒ 변수에 할당되는 것은 값
var sum = 10 + 20;
위 예제에서 sum
에 할당되는 것은 10 + 20 이 아니라, 10 + 20이 평가된 결과인 30이라는 값
식을 해석해서 값을 생성하거나 참조하는 것
사람이 이해할 수 있는 문자(아라비아 숫자, 알파벳, 한글 등) 또는 약속된 기호(' ', " ", ., [ ], { }, // 등)를 사용해 값을 생성하는 표기법
숫자 리터럴 3 ⇒ JavaScript는 이를 평가해 숫자 값 3을 생성
JavaScript 엔진은 코드가 실행되는 런타임에 리터럴을 평가해 값을 생성
100
10.5
0b01000001
(0b로 시작)0o101
(0o로 시작 // ES6에서 도입)0x41
(0x로 시작 // ES6에서 도입)"Hello"
, 'World'
true
, false
null
undefined
{ name: 'Lee', address: 'Seoul' }
[1, 3, 5,]
function () {}
/[A-Z]+/g
값으로 평가될수 있는 문(statement)
즉, 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조
var score = 100;
100
은 리터럴이다. 리터럴은 JavaScript 엔진에 의해 평가되어 값을 생성하므로 그 자체로 표현식이다.
리터럴은 그 자체로 표현식이다.
var score = 50 + 50;
50 + 50
은 리터럴 & 연산자로 구성되어있다. 그리고 평가되어 숫자 값 100을 생성하므로 표현식이다.
score;
score
는 식별자로, 참조 시 변수 값으로 평가된다. 즉 식별자 참조 또한 값으로 평가되믈 표현식이다.
값으로 평가될 수 있는 문은 모두 표현식이다.
// 리터럴 표현식
50
'Hi'
// 식별자 표현식
sum
person.name
arr[1]
// 연산자 표현식
10 + 50
sum = 10
sum !== 10
// 함수/메서드 호출 표현식 (선언이 이미 존재한다고 가정)
square()
perso.getName()
표현식은 값으로 평가 ⇒ 표현식과 표현식이 평가된 값은 동등한 관계 즉, 동치이다.
(1 + 10 = 11 ⇒ 1 + 10과 11은 동치이다.)
즉, 표현식은 값처럼 사용될 수 있고, 문법적으로 값이 위치할 수 있는 자리에 표현식도 위치할 수 있다.
산술 연산자 +
의 좌항과 우항에는 숫자 값
이 위치해야한다.
이때 숫자 값으로 평가될 수 있는 표현식이라면 숫자 값 대신 사용할 수 있다.
var x = 1 + 2;
// 식별자 표현식 x는 3으로 평가된다.
x + 3; // → 6