3.1 내부 [[Class]]

jude·2022년 2월 1일
0

you don't know js

목록 보기
20/30
post-thumbnail

typeof가 'object'인 값에는 [[Class]]라는 내부 프로퍼티가 추가로 붙는다.

이것으로 typeof로 명확히 그 타입을 알 수 없는 Array 라던가 null, undefined 등과 같은 값의 본연의 타입을 알아낼 수 있다.

Object.prototype.toString.call( [1,2,3] ); // [object Array]

Object.prototype.toString.call( /regex-literal/i ); // [object RegExp]

null, undefined와 같은 원시값에도 적용될까?

Object.prototype.toString.call( null ); // [object Null]

Object.prototype.toString.call( undefined ); // [object Undefined]

그밖에 문자열, 숫자, 블리언 등도 마찬가지로 확인할 수 있다.

Object.prototype.toString.call( "abc" ); // [object String]

Object.prototype.toString.call( 42 ); // [object Number]

Object.prototype.toString.call( true ); // [object Boolean]

반환되는 값은 문자열이기 때문에 아래와 같이 slice를 통해 타입값만 잘라낼 수 있다.

let a = null;

function getType(data) {
  // 혹은 뒤에 .toLowerCase() 를 붙여서 소문자로만 반환도 가능.
  return Object.prototype.toString.call(data).slice(8, -1);
}

getType( a ) // "Null"

명시적이지 못하지만 좀 더 간단하게 쓰는 방법도 있다.

toString.call( null ) // [object Null]
toString.call( undefined ) // [object Undefined]
toString.call( 123 ) // [object Number]
toString.call( "abc" ) // [object String]
toString.call( true ) // [object Boolean]
toString.call( [1,2,3] ) // [object Array]
toString.call( { name: 'jude' } ) // [object Object]
toString.call( function() {/* --- */} ) // [object Function]
toString.call( new Date() ) // [object Date]
toString.call( Error() ) // [object Error]
toString.call( /regex-literal/i ) // [object RegExp]
toString.call( Symbol() ) // [object Symbol]

결론

Object.prototype.toString.call() 으로 값의 타입을 정확히 알아낼 수 있다.
toString.call() 으로도 알아낼 수 있다.

profile
UI 화면 만드는걸 좋아하는 UI개발자입니다. 프론트엔드 개발 공부 중입니다. 공부한 부분을 블로그로 간략히 정리하는 편입니다.

0개의 댓글