js判断各种数据类型

谈到Javascript 数据判断,首先我们要思考一下,Javascript到底有多少种数据类型呢?
JavaScript的数据类型分为2大类:原始数据类型和引用数据类型
原始数据类型
ES5:Number、String、Boolean、null、undefined、NaN
ES6:Symbol
引用数据类型
ES5: Object的 Array、Date、Function
ES6: Set、WeakSet(和Set区别是只能包含对象)、Map
上面复习完了Javascript的数据类型,下面我们切入主体,开始讲数据类型的判断。

一、typeof

typeof用来判断各种数据类型,有两种写法:typeof xxx, typeof(xxx), 参数用括号包裹和不使用括号包括其实没有区别,这里看大家自己的使用习惯了。

	typeof 10       	输出 number
    typeof '10'     	输出 string
    typeof {}       	输出 object
    typeof []       	输出 object
    typeof null     	输出 object
    type new Map() 	    输出 object
    type new Set()			输出 object
    typeof false    	    输出 boolean
    typeof undefined        输出 undefined
    typeof (function(){})   输出 function
    

上述方法对{}、null、 [] 、new Map() 、new Set() 认为都是 object

二、instanceof

判断已知对象类型的方法.instanceof 后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支

 	var  array = [10,'10'],
         date = new Date(),
         fn = function(){};
    console.log(array instanceof Array) // true
    console.log(date instanceof Date) // true
    console.log(fn instanceof Object) // true

三、constructor

根据对象的constructor判断,返回创建此对象的数组函数的引用,该方法只能判断引用数据类型

    var array = [10, '10'],
        date = new Date(),
        fn = function(){},
        set = new Set([1]),
        map = new Map([1,2]),
        date = new Date();
     console.log(set .constructor === Set); // true
     console.log(map .constructor === Map); // true
     console.log(array.constructor === Array); // true
     console.log(date.constructor === Date); // true
     console.log(fn.constructor === Function); // true
     console.log(date.constructor === Date); // true

四、prototype

所有数据类型均可判断:Object.prototype.toString.call()

    var checkObjType = Object.prototype.toString; 
    checkObjType.call({}); // 输出 [object Object]
    checkObjType.call([]); // 输出 [object Array]
    checkObjType.call(function(){}); // 输出  [object Function]
    checkObjType.call('10'); // 输出 "[object String]"
    checkObjType.call(10);  // 输出 "[object Number]"
    checkObjType.call(true); // 输出 "[object Boolean]"
    checkObjType.call(undefined); // 输出 "[object Undefined]"
    checkObjType.call(null); // 输出 [object Null]
    checkObjType.call(new Map()); // 输出 [object Map]
    checkObjType.call(new Set()); // 输出 [object Set]
    // 还可以封装成公共函数
    function checkObj(obj){
		return Object.prototype.toString.call(obj)
	}
	checkObj(' ') // [object String]
	...

希望对大家有所帮助,有错误的地方,还希望大家留着指出,请多多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值