[자바스크립트 완벽가이드] - 타입, 값, 변수

Lee Jeong Min·2022년 5월 23일
0

자바스크립트

목록 보기
4/17
post-thumbnail

자바스크립트 완벽가이드 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()이 있다.

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

전역 객체

전역 객체는 자바스크립트 인터프리터를 시작할 때마다(또는 웹 브라우저가 새 페이지를 로드할 때마다) 생성되며, 전역 객체의 프로퍼티로 아래와 같은 것들을 가진다.

  • undefined, Infinity, NaN과 같은 전역 상수
  • isNaN(), parseInt(), eval() 같은 전역 함수
  • Date(), RegExp(), String(), Object(), Array() 같은 생성자 함수
  • Math와 JSON 같은 전역 객체

Node에선 global, 웹 브라우저에선 Window, 웹 워커 스레드에선 self로 전역 객체를 참조할 수 있다.

최신 브라우저 전체와 노드에서 glboalThis를 통해 어떤 환경에서든 전역 객체를 참조할 수 있는 표준이 나옴

변수 선언과 할당

var를 사용한 변수 선언

var를 선언한 변수의 특성에 대해서 Deep Dive책을 통해 많이 알게되었지만, delete 연산자로 삭제할 수 없다는 것은 처음 알았다.

var x = 2;

globalThis.x = 2;

즉, 위와 같이 var를 사용해 변수를 선언하면 globalThis로 참조할 수 있는데, delete 연산자로 삭제할 수 없기 때문에 완전히 같은것은 아니다.

✅ 선언되지 않은 변수 사용

x = 2;

위와 같이 스트릭트 모드가 아니라면 에러가 발생하지 않고, 전역 변수가 생성되는데 이런 동작은 버그의 원인이 될 수 있어 스트릭트 모드를 사용하는 것이 좋다!
또한 정상적인 var 선언으로 만들어진 프로퍼티와 달리 이러한 프로퍼티는 delete 연산자로 삭제할 수 있다.

profile
It is possible for ordinary people to choose to be extraordinary.

0개의 댓글