JS JavaScript 데이터 형식을 확인하는 방법

자바스크립트 데이터

JavaScript에는 두 가지 데이터 유형이 있습니다.

프리미티브 타입또 하나는 참조 유형(Reference Type)입니다.

JavaScript의 데이터형을 크게 2개로 분류하면, 원시형과 참조형이 있는 것이다.

원시 타입의 데이터는 숫자형 (Number), 문자열 (String), 호출된 데이터 (Boolean), undefined, null, symbol, bigint 예, 참조 타입의 데이터에는 객체(Object), 배열(Array), 함수(Function)가 있다.

따라서 자바스크립트를 사용할 때 자바스크립트에서 사용하는 데이터 유형을 쉽게 확인할 수 있습니다.

typeof 연산자를 사용합니다.

console.log(typeof 1) // Number 출력
console.log(typeof 'A') // String 출력
console.log(typeof true) // Boolean 출력
console.log(typeof undefined) // undefined 출력
console.log(typeof null) // object 출력
console.log(typeof ()) // object 출력
console.log(typeof {}) // object 출력
console.log(typeof function () {}) // function 출력
console.log(typeof Symbol()) // symbol 출력
console.log(typeof 0n) // bigint 출력

그러나 console.log와 typeof 연산자로 데이터형을 확인하면 리터럴에 생성한 배열, 객체와 null이 객체형으로 출력되는 것을 확인할 수 있다.

데이터를 정확하게 확인하는 방법과 위와 같이 출력되는 이유를 살펴 보겠습니다.

상기에서 데이터의 타입을 원시 타입과 참조 타입의 데이터로 분류했을 때, 널은 원시 타입에 데이터 속하고 있었다.

그런데 왜 typeof를 통해 데이터 유형을 확인하면 Object가 출력되는가? 에 대한 대답은 다음 링크에 있습니다.

The history of “typeof null”

The history of “typeof null” (Ad, please don’t block) Update 2013-11-05: I take a look at the C code of typeof to better explain why typeof null results in ‘object’. In JavaScript, typeof null is ‘object’, which incorrectly suggests that null is an o

2ality.com

결론에서 말하면 typeof null 값이 Object로 출력되는 것은 JavaScript 오류입니다.

다만, 이것은 수정할 수 없는 에러라고 말한다.

기존의 작성된 코드를 깨기 때문에, 이것은 null의 데이터형이 Object가 아닌 것을 인식하고 있으면 좋을 것입니다.

데이터 유형을 확인하는 방법

우선 가장 일반적으로 가능한 typeof를 사용하여 데이터 유형을 확인하는 것입니다.

그러나 이것은 위의 Null과 같은 오류가 있기 때문에 좋은 방법이라고 할 수 없습니다.

둘째로 데이터를 확인하는 방법은 instanceof 연산자사용하는 것입니다.

instanceof 연산자는 데이터를 확인하려는 객체의 생성자를 확인합니다.

보다 쉽게 ​​이해하기 위해 다음 코드를 살펴 보겠습니다.

const arr = ();
console.log(arr instanceof Array); //true 출력

arr라는 변수에 리터럴에 배열을 생성했다.

그런 다음 console.log와 instanceof를 통해 arr이라는 데이터가 어떤 클래스가 주어진 값을 생성했는지 확인합니다.

즉, arr의 생성자를 검사하여 데이터 유형을 확인할 수 있는 방법입니다.

이것은 원시 유형의 데이터에는 적용할 수 없습니다.

const ten = 10;
const hi = 'hello';

console.log(ten instanceof Number); //false 출력
console.log(hi instanceof String); //false 출력

위의 코드를 실행하면 false가 출력됩니다.

따라서 instanceof도 정확한 데이터 유형을 확인하는 좋은 방법이라고 말할 수 없습니다.

셋째 방법은 생성자 속성을 사용하는 것입니다.

constructor 은, 독자적인 constructor 함수를 돌려주는 속성입니다.

이 속성을 사용하면 생성자 함수에서 만든 데이터 형식을 확인할 수 있습니다.

다만 null, undefined는 TypeError가 발생하기 때문에, 이 방법도 확실히 데이터의 타입을 확인하는 방법이라고는 할 수 없다.

const hi = 'hello';
console.log(hi.constructor);

// ƒ String() { (native code) } // String 인것을 확인할 수 있다.

const hi = null; console.log(hi.constructor); // TypeError 발생 // VM1540:2 Uncaught TypeError: Cannot read properties of null (reading 'constructor') at <anonymous>:2:16

데이터를 확인하는 가장 정확한 방법

Object.prototype.toString 메서드를 사용하여 확인하는 방법입니다.

아직 이해하기 어려운 부분이 많아 설명은 추가로 공부해 업로드할 예정이다.

console.log(Object.prototype.toString.call('hello')); // (object String)
console.log(Object.prototype.toString.call(1)); // (object Number)
console.log(Object.prototype.toString.call(true)); // (object Boolean)
console.log(Object.prototype.toString.call(Symbol('symbol'))); // (object Symbol)
console.log(Object.prototype.toString.call(BigInt(1e10))); // (object BigInt)
console.log(Object.prototype.toString.call(())); // (object Array)
console.log(Object.prototype.toString.call({})); // (object Object)
console.log(Object.prototype.toString.call(null)); // (object Null)
console.log(Object.prototype.toString.call(undefined)); // (object Undefined)