js数据类型校验

六种数据类型:

number、string、boolean、undefined、null、object

ES6:symbol 独一无二的值

ES10:bigint

四种方式

//typeof() 
console.log( typeof(a) );//返回表示数据类型的字符串
//instanceof操作符
console.log( a  instanceof  number ); //  返回true或false
//constructor   
console.log( a.__proto__.constructor == Student.prototype.constructor );
//Object.prototype.toString.call()  
console.log.( Object.prototype.toString.call(a) );

每种方式都有缺陷:

topeof():只能判断基本数据类型,判断引用数据类型只能返回Object;

instanceofconstructor :不能很好的解决内置数据类型的判断,instanceofnullunderfined不起作用,constructorarray无法很好的判断

Object.prototype.toString.call()主要用于判断内置数据类型

如果想要完美的判断数据类型需要多种方式配合使用

方式一:typeof

typeof 可以用来判断基础数据类型,但无法判断引用数据类型(array、object)

//用法 :typeof 要判断的数据  或  typeof(要判断的数据)
//例:
console.log(typeof "");//string
console.log(typeof 1);//number
console.log(typeof true);//boolean
console.log(typeof null);//object
console.log(typeof undefined);//undefined
console.log(typeof []);//object
console.log(typeof function(){});//function
console.log(typeof {});//object
//返回结果为表示数据类型的字符串

方式二:instanceof

判断new关键字创建的引用数据类型不包括null和underfined

//用法: console.log( 要判断的数据 instanceof 数据类型) 例:
console.log("1" instanceof String);//false
console.log(new String(1) instanceof String);//true
console.log(1 instanceof Number);//false
console.log(new Number(1) instanceof Number);//true
console.log(true instanceof Boolean);//false
console.log(new boolean(false) instanceof boolean);//true
console.log([] instanceof Array);//true
console.log(function(){} instanceof Function);//true
console.log({} instanceof Object);//true

方式三:constructor

constructor 基本上可以应对基本数据类型和引用数据类型的判断,但如果声明了一个构造函数,并且把它的原型指向了Array,constructor也显得力不从心

//用法: console.log( (要判断的数据).constructor === 数据类型 )  例:
console.log( ("1").constructor === String );//true
console.log( (1).constructor === Number );//true
console.log( (true).constructor === Boolean );//true
console.log( ([]).constructor === Array );//true
console.log( (function(){}).constructor === Function );//true
console.log( ({}).constructor === Object );//true
//声明了一个构造函数,并且把它的原型指向了Array,constructor也显得力不从心
function Fn(){}
Fn.prorotype=new Array();
var f=new Fn();
console.log( f.constructor === Fn );//false
console.log( f.constructor === Array );//true

方式四:Object.prototype.toString.call() (推荐)

判断数据类型的一种完美解决方案

//用法及演示:
var a = Object.prototype.toString;
console.log( a.call("aaa") );//[object String]
console.log( a.call(1) );//[object Number]
console.log( a.call(true);//[object Boolean]
console.log( a.call(null) );//[object Null]
console.log( a.call(underfined) );//[object Underdined]
console.log( a.call([]) );//[object Array]
console.log( a.call(function(){}) );//[object Function]
console.log( a.call([]) );//[object Object]
//声明了一个构造函数,并且把它的原型指向了Array
function Fn(){};
Fn.prototype=new Array();
console.log( Object.prototype.toString.call(Fn) );//[object Function]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值