非指定数据类型上的判断方法
-
typeof
适用于判断基本类型及复杂数据类型和函数
6个基本数据类型(undefined,null,Boolean,String,Number,Symbol)
1个复杂数据类型Object
函数function
//undefined
let a,
b = undefined;
console.log(typeof a);//未初始化
console.log(typeof b);//初始化为undefined
console.log(typeof c);//未声明
//null 无此返回值,空对象引用返回object
//Symbol
let a = Symbol(),
b = Symbol.for('描述符');
console.log(typeof a);
console.log(typeof b);
//Object
let a = new Array(),
b = new Object(),
c = new function(){},
d = new RegExp(),
e = new Date();
console.log(typeof a);
console.log(typeof b);
console.log(typeof c);
console.log(typeof d);
console.log(typeof e);
//function
function Fnc(){
}
console.log(typeof Fnc);
console.log(typeof Object);
console.log(typeof Array);
console.log(typeof function(){});
console.log(typeof RegExp);
console.log(typeof Date);
-
instanceof
适用于判断何种引用类型及构造函数,能判断自定义数据类型以及原型链上继承的各种父类
let arr = [],
date = new Date();
function SupFnc(){
}
function SubFnc(){
}
SubFnc.prototype = new SupFnc();
let fnc = new SubFnc();
console.log(arr instanceof Array);//true
console.log(date instanceof Date);//true
console.log(fnc instanceof Fnc);//true
console.log(fnc instanceof SubFnc);//true
console.log(fnc instanceof SupFnc);//true
-
constructor
判断其构造函数,能判断自定义数据类型,只能判断原型链上继承的上一层父类
let arr = [];
function Fnc(){
}
let fnc = new Fnc();
console.log(arr.constructor == Array);//true
console.log(arr.constructor == Object);//false
console.log(fnc.constructor == Fnc);//true
Object.prototype.toString.call()
既可以判断何种引用类型,也可以判断基本类型,但是不能判断自定义数据类型
let arr = [];
function Fnc(){
}
let fnc = new Fnc();
console.log(Object.prototype.toString.call(arr));//[object Array]
console.log(Object.prototype.toString.call(fnc));//[object Object]
console.log(Object.prototype.toString.call(Fnc));//[object function]
console.log(Object.prototype.toString.call(''));//[object String]
//值得一提的是,用次方法可以判断出null类型
console.log(Object.prototype.toString.call(null))//[object null]
指定数据类型上的判断方法
-
Array.isArray
判断数组专用,不用担心有多个全局执行环境
let arr = [];
let obj = {0:'a',1:'b',length:2};
console.log(Array.isArray(arr));//true
console.log(Array.isArray(obj));//false
console.log(Array.isArray(Array.prototype.slice(obj)));//true 转换为真数组
-
.prototype.isPrototypeOf()
功能类似instanceof
var arr = [];
function SupFnc(){
}
function SubFnc(){
}
SubFnc.prototype = new SupFnc();
let fnc = new SubFnc();
console.log(SubFnc.prototype.isPrototypeOf(fnc));//true
console.log(SupFnc.prototype.isPrototypeOf(fnc));//true
console.log(Object.prototype.isPrototypeOf(fnc));//true
console.log(Array.prototype.isPrototypeOf(arr));//true