2020-12-28

非指定数据类型上的判断方法

  • 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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值