js类型判断

149 阅读1分钟

js中的数据类型:

基本数据类型:String、Number、Boolean、Undefined、Null、Symbol、BigInt(后两个es6新增)
引用数据类型:Object

js类型判断:

1. typeof

// 声明变量
let str = 'abc';
let num = 123;
let bool = false;
let und = undefined;
let nul = null;
let arr = [1, 2, 3, 4];
let obj = { name: 'jim' };
let fn = function() {console.log('function')};
let sym = Symbol()

console.log(typeof str)  // string
console.log(typeof num)  // number
console.log(typeof bool) // boolean
console.log(typeof und)  // undefined
console.log(typeof nul)  // object
console.log(typeof arr)  // object
console.log(typeof obj)  // object
console.log(typeof fn)   // function
console.log(typeof sym)  // symbol

typeof方法可以识别基本数据类型string、number、boolean、undefined、symbol,但是不能识别出null、array、object,但是可以识别出function

2. instanceof

console.log(str instanceof String)   // false
console.log(num instanceof Number)   // false
console.log(bool instanceof Boolean) // false
console.log(und instanceof Object)   // false
console.log(nul instanceof Object)   // false
console.log(arr instanceof Array)    // true
console.log(obj instanceof Object)   // true
console.log(fn instanceof Function)  // true
console.log(sym instanceof Symbol)   // false

instanceof不能识别出string、number、boolean、undefined、null、symbol,但是可以精准识别出对象类型array、object、function,也可以检测出多层继承关系。

3.constructor

console.log(str.constructor === String)   // true
console.log(num.constructor === Number)   // true
console.log(bool.constructor === Boolean) // true
console.log(arr.constructor === Array)    // true
console.log(obj.constructor === Object)   // true
console.log(fn.constructor === Function)  // true
console.log(sym.constructor === Symbol)   // true

null、undefined没有constructor方法,所以constructor不能判断null、undefined。

4.Object.prototype.toString.call

console.log(Object.prototype.toString.call(str))  // [object String]
console.log(Object.prototype.toString.call(num))  // [object Number]
console.log(Object.prototype.toString.call(bool)) // [object Boolean]
console.log(Object.prototype.toString.call(und))  // [object Undefined]
console.log(Object.prototype.toString.call(nul))  // [object Null]
console.log(Object.prototype.toString.call(arr))  // [object Array]
console.log(Object.prototype.toString.call(obj))  // [object Object]
console.log(Object.prototype.toString.call(fn))   // [object Function]
console.log(Object.prototype.toString.call(sym))  // [object Symbol]

可以看出这个方法可以精准识别出各个类型,vue3就是用的这种方法。