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就是用的这种方法。