타입, 값의 종류
Infinity
-Infinity
NaN
// 표기법만 다를 뿐 모두 같은 값
var binary = 0b01000001; // 2진수
var octal = 0o101; // 8진수
var hex = 0x41; // 16진수
console.log(binary); // 65
console.log(octal); // 65
console.log(hex); // 65
console.log(binary === octal); // true
console.log(octal === hex); // true
// 숫자 타입은 모두 실수 처리
console.log(1 === 1.0); // true
console.log(0 === -0); // true
console.log(Object.is(0, -0)); // false
// 특별 값
console.log(10 / 0); // Infinity
console.log(10 / -0); // -Infinity
console.log(1 * 'String'); // NaN
// BigInt
console.log(BigInt(1234567564567) === 1234567564567n); // true
텍스트 데이터 표현
''
""
백틱(``)
으로 감싼다백슬래시(\)
로 시작하는 이스케이프 시퀀스(escape sequence)를 사용해야 함멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능을 제공하는 새로운 문자열 표기법
${}
이용true
false
로 구분되는 조건에 의해 프로그램 흐름을 제어하는 조건문에서 자주 사용
var
키워드로 선언한 변수는 암묵적으로 JS엔진이 undefined
로 초기화
선언(declaration) : 식별자의 존재만 알리는 것
정의(definition) : 컴파일러가 변수를 생성해서 식별자와 메모리 주소가 연결되는 것자바스크립트의 경우, 변수를 선언하면 암묵적으로 정의가 이루어지므로 그 구분이 모호하다
ECMAScript 사양에서 변수는 선언 / 함수는 정의로 표현한다
변수에 값이 없다는 것을 의도적으로 명시(의도적 부재, intentional absence)할 때 사용
null
반환하기도 함ES6에서 추가된 7번째 타입으로, 변경 불가능한 원시 타입의 값
Symbol
함수 호출로 생성원시 타입 6가지를 제외한 모든 값은 객체 타입
① 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
② 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
③ 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
값은 메모리에 저장하고 참조할 수 있어야 하고, 메모리에 값을 저장하려면 먼저 확보해야 할 메모리 공간의 크기를 결정해야 함
불변값은 하나의 주소에 저장되어, 식별자가 그 주소를 가리키는 형식으로 사용됨
정적 타입 언어와 다르게 변수 선언이 아닌 할당 시 타입이 결정 (타입 추론, type inference)되고, 어떠한 데이터 타입 값이라도 자유롭게 할당 가능한 특징
typeof
는 엄밀하게 변수의 데이터 타입이 아니라, 변수에 할당된 값의 데이터 타입을 반환① 변수는 꼭 필요한 경우에 한해 제한적으로 사용
② 변수의 유효 범위(스코프)는 최대한 좁게 만들어 부작용 억제
③ 전역 변수 사용 최소화
④ 변수보다는 상수를 사용해 값의 변경 억제
⑤ 변수 이름은 목적/의미를 파악할 수 있도록 네이밍
하나 이상의 표현식을 대상으로 산술, 할당 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만듦
// 산술 연산자
5 * 4 // 20
// 문자열 연결 연산자
'My name is ' + 'Lee' // 'My name is Lee'
// 할당 연산자
color = 'red' // 'red'
// 비교 연산자
3 > 5 // false (boolean으로 평가)
// 논리 연산자
true && false // false
// 타입 연산자
typeof 'Hi' // string (문자열이 반환)
피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값 만듦
NaN
반환+
-
*
/
%
부수효과 | ||
---|---|---|
O | ++ -- | 값 증가/감소 |
X | + - | 숫자 타입으로 변환한 값 생성 및 반환 OR 문자열 연결(+) |
+
연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당
=
+=
-=
*=
/=
%=
좌항과 우항의 피연산자를 비교한 다음 그 결과를 불리언 값으로 반환
좌항과 우항의 피연산자가 같은 값으로 평가되는지 비교해 불리언 값 반환
비교 연산자 | 의미 | 설명 |
---|---|---|
== | 동등 비교 | 값이 같음 |
!= | 부동등 비교 | 값이 다름 |
=== | 일치 비교 | 값과 타입이 같음 |
!== | 불일치 비교 | 값과 타입이 다름 |
NaN
은 자신과 일치하지 않는 유일한 값Number.isNaN()
이용Object.is()
이용피연산자의 크기를 비교하여 불리언 값 반환
>
<
>=
<=
조건식의 평가 결과에 따라 반환할 값 결정
조건식 ? 참일 시 평가 후 반환 : 거짓일 시 평가 후 반환
if ... else
문의 가독성이 더 좋음우항과 좌항의 피연산자를 논리 연산함
||
&&
!
A || B
: A 아니면 B||
)과 논리곱(&&
)의 평가 결과는 불리언 값이 아닐 수도 있다!(x || y) === (!x && !y)
!(x && y) === (!x || !y)
왼쪽 피연산자부터 차례로 평가하고, 마지막 피연산자의 평가가 끝나면 마지막 피연산자의 평가 결과를 반환
소괄호()
로 피연산자를 감싸는 형태이고, 자신의 피연산자인 표현식을 가장 먼저 평가
데이터 타입을 문자열로 반환
NaN
-> "number"null
[]
-> "object"null
의 타입은 ===
로 확인하자좌항의 피연산자를 밑(base)으로, 우항의 피연산자를 지수(exponent)로 거듭제곱하여 숫자 값 반환
**
Math.pow()
사용했다**=
)?.
??
delete
new
instanceof
in
연산자의 어느 쪽부터 평가를 수행할 것인지를 나타내는 순서