자바스크립트 완벽가이드 3장에 해당하는 부분이고, 읽으면서 자바스크립트에 대해 새롭게 알게된 부분만 정리한 내용입니다.
타입이란?
→ 프로그래밍 언어에서 표현하고 조작할 수 있는 값의 종류
이 장에서는 자바스크립트에서 데이터를 어떻게 표현하고 조작하는지 기본적인 사항을 자세히 설명함.
📖 숫자 리터럴의 구분자
const billion = 1_000_000_000;
const bytes = 0x89_ab_cd_ef;
const bits = 0b001_1101_0111;
const fraction = 0.123_456_789;
console.log(billion); // 1000000000
console.log(bytes); // 2309737967
console.log(bits); // 471
console.log(fraction); // 0.123456789
위와 같이 숫자 리터럴 안에 밑줄을 써서 리터럴을 읽기 쉽게 나눠 쓸 수 있다.
JS에서 사용하는 IEEE 754 부동 소수점 표현은 이진 표현이기 때문에 1/2, 1/8/, 1/1024
같은 분수는 정확하게 표현이 가능하다.
그러나 1/10, 1/100, 0.1
과 같은 단순한 숫자를 정확하게 표현하지 못한다.
따라서 이런 부동 소수점 근삿값 때문에 문제가 발생한다면, 정수로 변환하는 것을 고려하자.
📖 문자, 코드 포인트, 자바스크립트 문자열
JS의 문자열 메서드는 대부분 문자가 아니라 16비트 값 단위로 동작한다.
그러나 ES6에서 문자열은 이터러블(iterable)이고, 문자열에 for/of루프나 ... 연산자를 사용하면 16비트 값이 아닌 실제 문자를 순회한다.
자바스크립트에서 역슬래시(\
)를 사용하여 일반적인 방법으로 문자열에 표시할 수 없는 문자를 표현한다.
이스케이프 시퀀스라는 단어 안에도 들어가 있듯이, 역슬래시를 써서 작은 따옴표로 감싸인 문자의 일반적인 해석 방법을 벗어난다(이스케이프한다)는 의미이다.
심벌을 사용하면 고유한 값을 반환한다.
const symname = Symbol('propname');
const symname2 = Symbol('propname');
console.log(symname); // Symbol(propname)
console.log(symname2); // Symbol(propname)
console.log(symname === symname2); // false
Symbol()
함수는 절대 같은 값을 반환하지 않는다.
그러나 위와 다르게 다른 코드에서도 심벌을 사용할 수 있도록 심벌을 정의하고 공유하기 위한 Symbol.for()
이 있다.
Symbol.for()
은 같은 문자열로 호출했을 때 항상 같은 값을 반환한다.
const symname = Symbol.for('propname');
const symname2 = Symbol.for('propname');
console.log(symname); // Symbol(propname)
console.log(symname2); // Symbol(propname)
console.log(symname === symname2); // true
전역 객체는 자바스크립트 인터프리터를 시작할 때마다(또는 웹 브라우저가 새 페이지를 로드할 때마다) 생성되며, 전역 객체의 프로퍼티로 아래와 같은 것들을 가진다.
Node에선 global, 웹 브라우저에선 Window, 웹 워커 스레드에선 self로 전역 객체를 참조할 수 있다.
최신 브라우저 전체와 노드에서
glboalThis
를 통해 어떤 환경에서든 전역 객체를 참조할 수 있는 표준이 나옴
var를 선언한 변수의 특성에 대해서 Deep Dive책을 통해 많이 알게되었지만, delete 연산자로 삭제할 수 없다는 것은 처음 알았다.
var x = 2;
globalThis.x = 2;
즉, 위와 같이
var
를 사용해 변수를 선언하면globalThis
로 참조할 수 있는데,delete
연산자로 삭제할 수 없기 때문에 완전히 같은것은 아니다.
✅ 선언되지 않은 변수 사용
x = 2;
위와 같이 스트릭트 모드가 아니라면 에러가 발생하지 않고, 전역 변수가 생성되는데 이런 동작은 버그의 원인이 될 수 있어 스트릭트 모드를 사용하는 것이 좋다!
또한 정상적인 var 선언으로 만들어진 프로퍼티와 달리 이러한 프로퍼티는 delete 연산자로 삭제할 수 있다.