前端积累 | JavaScript数据类型判断

73 阅读1分钟

JavaScript是一个弱类型语言,因此类型的判断就非常重要。JavaScript提供了若干种方法来实现类型判断,下面介绍其中的一些方法以及它们的特性。

typeof运算符

typeof运算符是最基本的运算符,返回一个字符串,可以判断基本类型。

typeof 1;// number
typeof '1';// string
typeof true;// boolean
typeof null;// object
typeof undefined;// undefined
typeof new Object();// object
typeof [1,2,3];// object
typeof function(){};// function

这种方式就只能判断基本类型了,如果我们想知道具体的类型的话,就不能依靠typeof了。

instanceof 操作符

instanceof用于检测某个对象的原型链中是否存在某个构造函数的原型。

[1,2,3] instanceof Array;// true
[1,2,3] instanceof Promise;// false
[1,2,3] instanceof Object; // true

这个操作符对于整个原型链都是有效的,所以我们对ArrayObject都是返回true了。

Object.prototype.toString()方法

这个方法也可以判断类型,它的作用原理是找到this指向的那个对象的Class属性。因此一般在使用的时候需要配合call或者apply。不过其只能查询原生的对象类型,如果我们需要判断的可能结果中包括自定义类型的话,那么就需要重写该方法。


class obj{
    constructor(name){
        this.name = name;
    }
}
obj.prototype.toString = function(){
    return `obj:${this.name}`
}
const obj1 = new obj('1');
obj1.toString();// obj:1
const arr = [1,2,3];
Object.prototype.toString.apply(arr);// [object Array]

constructor属性

每一个对象都会有一个constructor属性,指向这个对象的构造函数。我们可以通过该属性与构造函数的比较来判断其是由哪个构造函数所创建的。

function Obj(){
}
const obj = new Obj();
obj.constructor === Obj;// true
obj.constructor === Object;// false