Math, Reflect, JSON을 제외한 표준 빌트인 객체
= 인스턴스를 생성할 수 있는 생성자 함수 객체
= 프로토타입 메서드와 정적 메서드를 제공
표준 빌트인 객체의 prototype 프로퍼티에 바인딩된 객체
= 다양한 기능의 빌트인 프로토타입 메서드를 제공
표준 빌트인 객체
= 인스턴스 없이도 호출 가능한 빌트인 정적 메서드 제공
const str = 'hello';
// 원시 타입인 문자열이 프로퍼티와 메서드를 갖고 있는 객체처럼 동작
console.log(str.length); // 5
console.log(str.toUpperCase()); // HELLO
// ① 식별자 str은 문자열을 값으로 가짐
const str = 'hello';
// ② 식별자 str은 암묵적으로 생성된 래퍼 객체를 가리킴
// 식별자 str의 값 'hello'는 래퍼 객체의 [[StringData]] 내부 슬롯에 할당
str.name = 'Lee';
// ③ 식별자 str은 다시 원래의 문자열,
// 즉 래퍼 객체의 [[StringData]] 내부 슬롯에 할당된 원시값을 가짐
// ②에서 생성된 래퍼 객체는 아무도 참조하지 않으므로 가비지 컬렉션의 대상이 됨
// ④ 식별자 str은 새롭게 암묵적으로 생성된 래퍼 객체를 가리킴
// 새롭게 생성된 래퍼 객체에는 name 프로퍼티가 존재하지 않음
console.log(str.name); // undefined
// ⑤ 식별자 str은 다시 원래의 문자열,
// 즉 래퍼 객체의 [[StringData]] 내부 슬롯에 할당된 원시값을 가짐
console.log(typeof str, str); // string hello
= 코드가 실행되기 이전 단계에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체 (= 최상위 객체)
window.parseInt('F', 16); // → 15
parseInt('F', 16); // → 15
window.parseInt === parseInt // → true
// var 키워드로 선언한 전역 변수
var foo = 1;
console.log(window.foo); // 1
// 선언하지 않은 변수에 값을 암묵적 전역.
// bar은 전역 변수가 아닌 전역 객체의 프로퍼티
bar = 2;
console.log(window.bar); // 2
// 전역 함수
function baz() { return 3; }
console.log(window.baz()); // 3
var x = 10; // 전역 변수
function foo() {
// 선언하지 않은 식별자에 값 할당
y = 20;
}
foo();
// 선언하지 않은 식별자 y를 전역에서 참조 가능
console.log(x + y); // 30
y = 20을 window.y = 20으로 해석하여 전역 객체에 프로퍼티를 동적 생성
→ y는 전역 객체의 프로퍼티가 되어 마치 전역 변수처럼 동작 = 암묵적 전역