JavaScript에서 변수의 유형을 판단하는 방법

13. 자바스크립트에서 변수의 타입을 판단하는 방법

1. typeof 연산자:

변수의 데이터 유형을 나타내는 문자열을 반환할 수 있습니다. 예를 들어:

let num = 123;
console.log(typeof num); // "number"

let str = "Hello";
console.log(typeof str); // "string"

2. instanceof 연산자:

변수가 특정 유형의 인스턴스인지 여부를 판별하는 데 사용할 수 있습니다. 예를 들어:

let arr = [1, 2, 3];
console.log(arr instanceof Array); // true

let date = new Date();
console.log(date instanceof Date); // true

3, Object.prototype.toString.call() 방법:

변수의 데이터 유형을 나타내는 문자열을 반환할 수 있습니다. 예를 들어:

let num = 123;
console.log(Object.prototype.toString.call(num)); // "[object Number]"

let str = "Hello";
console.log(Object.prototype.toString.call(str)); // "[object String]"

4. 생성자 속성:

모든 JavaScript 객체에는 객체의 생성자를 나타내는 생성자 속성이 있습니다. 예를 들어:

let arr = [1, 2, 3];
console.log(arr.constructor === Array); // true

let date = new Date();
console.log(date.constructor === Date); // true

위는 JavaScript에서 변수 유형을 판단하는 몇 가지 방법이며 시나리오마다 다른 방법이 필요합니다.

손으로 쓴 instanceof()

function myInstanceof(left, right) {
    
    
    // 获取对象的原型
    let proto = Object.getPrototypeOf(left)
    // 获取构造函数的 prototype 对象
    let prototype = right.prototype;
    // 判断构造函数的 prototype 对象是否在对象的原型链上
    while (true) {
    
    
        if (!proto) return false;
        if (proto === prototype) return true;
        // 如果没有找到,就继续从其原型上找,Object.getPrototypeOf方法用来获取指定对象的原型
        proto = Object.getPrototypeOf(proto);
    }
}
//测试1
let obj = new Object()
console.log(myInstanceof(obj, Object));  //true

//测试2
function Father() {
    
     }
function Son(){
    
    }
Son.prototype = new Father()
let obj2 = new Son()
console.log(myInstanceof(obj2,Son));  //true
console.log(myInstanceof(obj2,Father)); //true

애플리케이션 시나리오의 차이점

  1. typeof 연산자: typeof연산자는 변수의 유형을 결정하는 데 가장 일반적으로 사용되는 방법입니다. 숫자, 문자열, 부울 값, 객체, 함수 및 정의되지 않음과 같은 데이터 유형을 식별할 수 있습니다. 그러나 배열과 null 객체 모두에 대해 "객체"를 반환하므로 배열과 null 유형을 잘 인식하지 못하는 단점이 있습니다.

  2. instanceof 연산자: instanceof연산자는 변수가 생성자의 인스턴스인지 여부를 판별할 수 있는 특수 메소드이므로 배열, 날짜 및 정규 표현식과 같은 유형을 잘 식별할 수 있습니다.

  3. Object.prototype.toString.call() 메서드: Object.prototype.toString.call()이 메서드는 모든 데이터 유형을 식별하고 "[object Number]", "[object String]" , "와 같은 유형의 문자열 식별자를 반환할 수 있는 매우 강력한 메서드입니다. [객체 배열]" 등 따라서 이 방법을 사용하면 모든 데이터 유형을 매우 잘 결정할 수 있습니다.

  4. 생성자 속성: 모든 JavaScript 개체에는 constructor개체의 생성자 기능을 나타내는 속성이 있습니다. 객체의 타입은 속성의 값이 어떤 생성자와 같은지 판단함으로써 판단할 수 있다. 그러나 이 방법은 단점이 있습니다. 즉, 기본 데이터 유형(예: 숫자 및 문자열)의 경우 속성이 없으므로 constructor기본 데이터 유형을 잘 식별할 수 없습니다.

    실제 개발에서 필요에 따라 다양한 방법을 선택하여 변수 유형을 결정할 수 있습니다.모든 데이터 유형을 식별해야 하는 경우 이 방법을 사용할 수 있으며 기본 데이터 유형만 식별하면 연산자를 사용할 수 있습니다. 특정 데이터 유형을 식별해야 하는 Object.prototype.toString.call()경우 연산자 또는 속성을 사용할 수 있습니다.typeofinstanceofconstructor

추천

출처blog.csdn.net/m0_61696809/article/details/129234296