자바스크립트 객체의 분류
- 표준 빌트인 객체모든 실행환경에서 언제나 사용가능함
- ECMAScript 사양에 정의된 객체
- 호스트 객체브라우저에서는 WebAPI, NodeJS에서는 고유의 API를 제공함
- 실행환경에 따라 다르게 제공되는 객체
- 사용자 정의 객체
- 사용자가 직접 정의한 객체
표준 빌트인 객체
String, Number, Boolean, Function, Array, Date 등
원시값과 래퍼 객체
원시값 역시 객체처럼 동작하는데, 원시값을 객체처럼 사용할 경우 JS엔진이 암묵적으로 연관된 객체(래퍼 객체)를 생성하여 생성된 객체로 프로퍼티에 접근하거나 메서드를 호출하고 다시 원시값으로 돌린다.
문자열에 대해 마침표 표기법으로 접근하면, 래퍼객체인 String객체로 인스턴스를 생성하고, 문자열은 래퍼 객체의 [[StringData]] 내부 슬롯에 할당된다.
다만 이 래퍼 객체에 특정 프로퍼티를 추가한 경우, 그 프로퍼티에 접근할 수는 없다.
래퍼객체가 원시값으로 변환하면 해당 래퍼객체는 가비지 컬렉션의 대상이 되기 때문이다.
전역객체
코드가 실행되기 이전 단계에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수학 객체
브라우저에서는 window, self, frames이고 node환경에서는 global이다.
어떤 객체에도 속하지 않은 모든 빌트인 객체의 최상위 객체이다.
globalThis
브라우저환경과 node환경에서 전역객체를 지칭하는 것을 통일한 식별자
빌트인 전역 프로퍼티
전역객체의 프로퍼티
Infinity
⇒ 무한대(number)
NaN
Not a Number(놀랍게도 number)
빌트인 전역 함수
eval
js 문자열을 인수로 받아, 표현식인경우 값을 평가하고, 문이라면 런타임에 실행함
사용하지 말것
isFinite
인수가 유한수인지 검사함
인수가 숫자가 아닌경우 숫자로 암묵적 변환
isNaN
NaN인지 검사함
parseFloat, parseInt
문자열을 해당하는 숫자로 변환함
문자가 아닌경우, 문자로 변환하여 수행함
두번째 인수로 진법을 전달할 수 있음
반환값은 항상 10진수
encodeURI/decodeURI
완전한 URI를 입력받아 이스케이프처리를 위해 인코딩함
전체 URL이 URI이고, 쿼리와 fragment를 뺀 것이 URL이다.
URI에 한글, 공백, 의미를가진 문자를 이스케이프 처리하여 반환한다.
const uri="https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EA%B2%80%EC%83%89"
const enc=encodeURI(uri);
console.log(enc); //https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%25EA%25B2%2580%25EC%2583%2589
uri===decodeURI(enc); //true
encodeURIComponent/decodeURIComponent
해당 함수는 인수로 전달된 문자열을 쿼리스트링의 일부로 간주한다.
따라서 =,?,&까지 인코딩한다.
암묵적 전역
var로 생성한 전역 변수는 전역 객체의 프로퍼티로 추가된다.
해당 변수는 변수가 아니라 프로퍼티이므로 호이스팅이 일어나지 않는다.