데이터 유형을 더 잘 확인하는 방법 - Lee-hyuna/33-js-concepts-kr GitHub Wiki

Intro


늘 어떤 데이터 유형이 있는지 확인 하는 것은 쉬운 일은 아니다. 언어 자체는 직설적인 방식으로 작용하는 유형의 연산자를 제공한다. typeof는 데이터유형을 문자열로 반환하므로 객체일 경우 "객체"가 반환되고 문자열 일 경우 "스트링"이 반환된다.

그러나 Javascripts 데이터 유형과 연산자 유형은 완벽하지 않다. 예를 들어 어레이의 경우 null > "object"가 반환되고 NaN 및 Infinity의 경우 "number"가 반환된다. 실제로 어떤 값이 숫자, 문자열, null인지, 배열인지 알기 위해서는 조금 더 많은 이해와 논리가 필요하다


Table of contents


String

String은 항상 String이기 때문에 타입체크 하기가 쉽다. 새 문자열(new string) 유형으로 호출할 경우 대신 "객체"가 반환된다. 따라서 이러한 문자열을 포함하기 위해 아래처럼 사용할 수 있다.

// Returns if a value is a string
function isString (value) {
  return typeof value === 'string' || value instanceof String;
}

Number

typeof에서 일반 숫자 가 아닌 다른 것들은 NaN 및 Infinity와 같은 "숫자"를 반환한다. 값이 실제로 숫자인지 알아 보려면 isFinite 함수가 필요하다.

// Returns if a value is really a number
function isNumber (value) {
return typeof value === 'number' && isFinite(value);
  }

Array

자바스크립트에서의 배열은 Java 혹은 다른 언어와 다르다. 실제로는 객체로 구성 되어있기 때문에 typeof는 객체를 반환하게 될 것이다. 실제로 어떤 배열인지 알아보기 위해 생성자 Array와 비교할 수 있다.

// Returns if a value is an array
function isArray (value) {
  return value && typeof value === 'object' && value.constructor === Array;
}

// ES5 actually has a method for this (ie9+)
Array.isArray(value);

Function

함수는 함수이므로 typeof로 출분히 체크할 수 있다.

// Returns if a value is a function
function isFunction (value) {
  return typeof value === 'function';
}

Object

자바스크립트는 대부분의 것들이 객체로 구성되어 있다. 값이 속성을 가질 수 있고 반복 될 수 있는 객체인지 확인하려면 해당 생성자를 Object와 비교할 수 있다. 클래스에서 생성된 객체는 동작하지 않으며 instanceof 연산자를 사용할 수 있다.

// Returns if a value is an object
function isObject (value) {
  return value && typeof value === 'object' && value.constructor === Object;
}

Null & undefined

nullundefined는 falsy한 값들 이기 때문에 꼭 명시적으로 검사할 필요가 없다. 그러나 함수 아래에서 사용 하는 것이 트릭이다.

// Returns if a value is null
function isNull (value) {
  return value === null;
}

// Returns if a value is undefined
function isUndefined (value) {
  return typeof value === 'undefined';
}

Boolean

booleans는 typeof에서 true와 false에 대해 boolean값을 반환한다.

// Returns if a value is a boolean
function isBoolean (value) {
  return typeof value === 'boolean';
}

RegExp

RegExp는 객체이므로 확인할땐 생성자로 판단해야 한다.

// Returns if a value is a regexp
function isRegExp (value) {
  return value && typeof value === 'object' && value.constructor === RegExp;
}

Error

자바스크립트에서 에러는 다른 프로그래밍언어에서 exceptions과 동일하다. instance Error, TypeError, RangeError로 다른 형태로 들어온다. instanceof 명령문으로 "메시지" 프로퍼티 에러를 확인해야 한다.

// Returns if value is an error object
function isError (value) {
  return value instanceof Error && typeof value.message !== 'undefined';
}

Date

날짜는 실제로 자바스크립트에서 데이터 유형이 아니다. 그러나 Date객체가 있는지 여부를 판단하려면 instanceof로 확인할 수 있다.

// Returns if value is a date object
function isDate (value) {
  return value instanceof Date;
}

Symbol

ES6에서 Symbol이라는 데이터 유형이 추가 되었다. typeof로 "Symbol"을 리턴하므로 더이상 로직이 필요하지 않는다.

// Returns if a Symbol
function isSymbol (value) {
  return typeof value === 'symbol';
}
⚠️ **GitHub.com Fallback** ⚠️