JS Study 4주차 ( 빌트인 객체 )

jaehan·2023년 5월 5일
0

JavaScript

목록 보기
24/33
post-thumbnail

빌트인 객체

자바스크립트 객체는 3개의 객체로 분류된다

  • 표준 빌트인 객체: ECMAScript 사양에 정의된 객체
  • 호스트 객체: 실행환경에서 추가로 제공하는 객체
  • 사용자 정의 객체: 사용자가 직접 정의한 객체

표준 빌트인 객체

자바스크립트는 Ojbect, String, Boolean, JSON 등 40여 개의 표준 빌트인 객체를 제공한다.

📌 Math, Reflect, JSON을 제외하면 다 생성자 함수 객체이다.

따라서 아래와 같이 생성자 함수로 호출하여 인스턴스를 생성할 수 있다.

  • 생성된 인스턴스의 프로토타입은 표준 빌트인객체의 프로토타입을 상속받는다.
  • Number로 생성한 인스턴스의 프로토타입은 Number.prototype이다.
  • 인스턴스가 Number.prototype의 메서드나 프로퍼티를 사용할 수 있다.
  • 정적 메서드를 제공한다.

ex)

const numObj = new Number(1.5);
console.log(typeof numObj); // object
console.log(Object.getPrototypeOf(numObj) === Number.prototype); // true
console.log(numObj.toFixed()); // 2
console.log(Number.isInteger(0.5)); // false

원시값과 래퍼 객체

❓ 자바스크립트에서 숫자와 문자열은 Number, String 타입을 가진다고 배웠다. 근데 그냥 'name' 이렇게 만들기도 하고 new String('name') 이렇게 만들기도 한다. 왜 이렇게 두가지 방식이 있을까.

const str = 'hello';

console.log(str.length); // 5
console.log(str.toUpperCase); // HELLO

위의 예시를 보면 new String('hello')로 만든것 처럼 동작한다.
❗️ 이는 원시값인 문자열, 숫자, 불리언값에 대해 마침표 표기법으로 접근하면 자바스크립트 엔진이 연관된 객체로 변환해 주기 때문이다. 이를 래퍼 객체라 한다

문자열의 동작방식을 예로 들면

  1. 원시값으로 문자열을 선언한다
  2. 마침표 표기법으로 접근하면 래퍼 객체가 생성된다.
  3. 원시값의 식별자는 암묵적으로 생성된 래퍼 객체를 가리킨다.
  4. 식별자의 값은 래퍼 객체의 [[StringDate]] 내부 슬롯에 할당된다.
  5. 래퍼 객체의 값을 사용한다.
  6. 끝나면 래퍼 객체의 참조를 끊는다
  7. 따라서 래퍼 객체는 가비지 컬렉터에 의해 사라진다
  8. 다시 마침표 표기법으로 접근하면 새로운 래퍼객체를 생성해서 가리킨다

위의 동작방식을 코드로 보면

// 1 
const str = 'hello';

// 2, 3, 4, 5, 6, 7
str.name = 'Lee';

// 8
console.log(str.name); // undefined

📌 null과 undefined는 래퍼 객체를 생성하지 않는다. 따라서 에러 발생

전역 객체

전역객체는 코드가 실행되기 이전 단계에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체이고, 어떤 객체에도 속하지 않은 최상위 객체이다.

전역객체는 표준 빌트인 객체와 환경에 따른 호스트 객체, var 키워드로 선언한 전역변수와 전역 함수를 프로퍼티로 갖는다.

  • 전역 객체는 개발자가 의도적으로 생성할 수 없다.
  • 전역 객체의 프로퍼티를 참조할 때 window(global)을 생략할 수 있다.
  • 전역 객체는 Object, String, Number ... 같은 모둔 표준 빌트인 객체를 가지고 있다.
  • 자바스크립트 실행에 따라 추가적으로 프로퍼티와 메서드를 갖는다.
  • var 키워드로 선언한 전역변수와 선언하지 않은 변수에 값을 할당한 암묵적 전역, 전역함수는 전역 객체의 프로퍼티가 된다.

빌트인 전역 프로퍼티

빌트인 전역 프로퍼티는 전역 객체의 프로퍼티를 의미한다.

  • Infinity: 무한대를 나타내는 숫자값
  • NaN: 숫자가 아님을 나타내는 숫자값
  • undefined: 원시타입 undefined

빌트인 전역 함수

빌트인 전역 함수는 애플리케이션 전역에서 호출할 수 있는 빌트인 함수이다.

  • eval: 문자열을 인수로 전달받아 문자열이 표현식이라면 런타임에 평가하여 값을 생성하고, 문이라면 런타임에 실행한다.
    📌 eval은 보안적으로 좋지 않고 속도가 느려 쓰지말자
  • isFinite: 인수가 유한수인지 검사하는 함수
  • inNaN: 인수가 NaN인지 검사하는 함수
  • parseFloat: 문자열 인수를 실수로 해석하여 반환
  • paraseInt: 문자열을 정수로 해석하여 반환
  • encodeURI / decodeURI: 완전한 URI를 문자열로 전달받아 이스케이프 처리를 위해 인코딩 / 디코딩
  • encodeURIComponent / decodeURIComponent: URI 구성요소를 인수로 전달받아 인코딩 / 디코딩

암묵적 전역

var x = 10;
function foo() {
  y = 20;
}
foo();

console.log(x + y); // 30

위의 예시를 보면 정상적이라면 y가 전역에 없기 때문에 오류가 나야하지만 나지 않는다

그 이유는 y를 선언하지 않고 값을 넣었기 때문에 전역 객체의 프로퍼티가 된다
window.y = 20 이 되는 것이다.
이러한 현상을 암묵적 전역이라 한다.

하지만 이 값은 프로퍼티이기 때문에 호이스팅이 발생하지 않고 delete로 삭제할 수 있다.

참고 :
https://www.inflearn.com/course/%EB%AA%A8%EB%8D%98-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%94%A5%EB%8B%A4%EC%9D%B4%EB%B8%8C

0개의 댓글