js的数据类型和类型校验方法

js的数据类型分为两种:基本数据类型和引用型数据类型

        基本数据类型(也叫简单数据类型)分别是:Number 、String、Boolean、BigInt、Symbol、Null、Undefined。其中的Symbol是es6新增的数据类型,这种的数据类型特点就是没有重复值,数据的创建的方法Symbol()。因为Symbol创建的数据类型具有唯一性,所以Symbol() !== Symbol()

        引用型数据类型(也叫复杂数据类型)一般用Object代表:普通对象,数组,正则,日期,Math数学函数都属于Object。

下面就是数据类型的校验方法

第一种:typeof

        typeof一般用于校验基本数据类型,因为对于引用型数据类型他只会返回object不太好用

function会返回function

console.log(typeof '')                 //string
console.log(typeof 1)                  // number
console.log(typeof false)              // boolean
console.log(typeof NaN)                // number
console.log(typeof undefined)          // undefined
console.log(typeof null, 123)          // object
console.log(typeof new Object())       // object
console.log(typeof {})                 // object
console.log(typeof new Array());       // object
console.log(typeof [1, 2]);            // object
console.log(typeof new Date());        // object
console.log(typeof function () { });   // function

第二种:instanceof

instanceof校验数据类型他会返回ture或false,但是在校验基本数据型他会返回false

var aa = new Array()
console.log(aa instanceof Array);  // true
console.log({} instanceof Object); // true
console.log(123 instanceof Number) // false                              
console.log('' instanceof String)  // false

第三种:constructor

var obj = 123
console.log(obj.constructor === Number) // true
var obj1 = []
console.log(obj1.constructor === Array) // false
console.log(obj1.constructor === Object) // false

第四种:Object.prototype.toString

console.log(Object.prototype.toString); // toString() { [native code] }
console.log(Object.prototype.toString.call([]).slice(8,-1)) // Array
console.log(Object.prototype.toString.call({}).slice(8,-1)) // Object
console.log(Object.prototype.toString.call({}).slice(8,-1).toLowerCase()) // object
console.log(Object.prototype.toString.call(123).slice(8,-1)) // Number
console.log(Object.prototype.toString.call(123).slice(8,-1).toLowerCase()) // number

最后我们可以使用上面的方法校验各种数据类型

function fn(obj){
    let type = typeof obj;  
    if(type!=='object'){          //判断出是否是基本数据类型
        return console.log(type); 
    }
    return console.log(Object.prototype.toString.call(obj).slice(8,-1).toLowerCase());
}
fn({});          // 打印object
fn([]);          // 打印array
fn(Symbol());    // 打印symbol
fn('');          // 打印string
fn();            // 打印undefined
fn(null);        // 打印null
fn(123);         // 打印number
fn(true);        // 打印boolean

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值