Javascript 기초 03 - 네이티브

네이티브란? 특정 환경(브라우저)에 종속되지 않은 ESMAScript 명세에 있는 내장 함수로 원시 값을 감싸는 객체 래퍼 이다.

  • String()
  • Number()
  • Boolean()
  • Array()
  • Object()
  • Function()
  • RegExp()
  • Date()
  • Error()
  • Symbol()

typeof 를 이용해서 type을 구해보면 원시 값 및 객체의 type은 아래와 같다.

console.log(typeof "스물여섯")              // string
console.log(typeof 26)                    // number
console.log(typeof true)                  // boolean
console.log(typeof [])                    // object
console.log(typeof {})                    // object
console.log(typeof function(){})          // function
console.log(typeof (/regex-literal/i))    // object
console.log(typeof (new Date))            // object 
console.log(typeof (new Error))           // object

Object.prototype.toString.call 객체의 [[class]]내부의 프로퍼티를 확인할 수 있다.

아래 코드를 보면 String과 같은 원시값도 object로 랩핑 되어 있는 걸 확인할 수 있다.

자바스크립트가 자동으로 랩핑해주기 때문에 객체에 내장된 함수를 사용할 수 있다.

console.log(Object.prototype.toString.call("스물여섯"))          // [object String]
console.log(Object.prototype.toString.call(26))                // [object Number]
console.log(Object.prototype.toString.call(true))              // [object Boolean]
console.log(Object.prototype.toString.call([]))                // [object Array]
console.log(Object.prototype.toString.call({}))                // [object Object]
console.log(Object.prototype.toString.call(function(){}))      // [object Function]
console.log(Object.prototype.toString.call(/regex-literal/i))  // [object RegExp]
console.log(Object.prototype.toString.call(new Date))          // [object Date]
console.log(Object.prototype.toString.call(new Error))         // [object Error]

객체 래핑(박싱)

원시 값엔 프로퍼티나 메서드가 없으므로 .length , toString() 등을 사용할 수 없다.

따라서 이러한 메서드를 사용하려면 객체 래퍼로 감싸줘야하는데, 자바스크립트는 이를 자동으로 래핑한다.

let a = 'righthot';

console.log(a.length)           // 8
console.log(a.toUpperCase())    // RIGHTHOT

위의 결과 처럼 자바스크립트는 자동으로 원시값을 래핑하기 때문에 직접 래핑 할 경우 오히려 프로그램이 느려지거나 예상치 못한 결과를 만날 수 있다.

let a = new Boolean(false);
        
console.log(a)             // boolean {false}
console.log('a = ' + a)    // a = false
console.log('!a = ' + !a)  // !a = false

false 를 직접 래핑했을 때 a의 값이 예상과 달리 ‘truthy’한 객체이기 때문에 위와 같은 결과가 나타난다.

따라서 원시값은 직접 객체 래퍼로 래핑하기보다는 그대로 사용하는 것이 좋다.


© 2021. All rights reserved.