JavaScript 数据类型判断

JavaScript 数据类型检查

JavaScript数据类型分类

  • 基本类型(值类型):5种
    • String
    • Number
    • Boolean
    • Undefined
    • Null
  • 对象类型(引用类型):3种
    • Object
    • Array:可以通过数值下标操作且内部数据有序的特殊对象
    • Function:可以运行的特殊对象

JavaScript数据类型判断

  • typeof:返回数据类型的字符串表达,可以判断 Undefined 、String、Number、Boolean、Function
    	var a;
    	console.log(typeof a,typeof a === 'undefined') // 'undefined' true
    	a=3;
    	console.log(typeof a,typeof a === 'number');//'number' true
    	a='javaScript';
    	console.log(typeof a,typeof a === 'string');//'string' true
    	a=true;
    	console.log(typeof a,typeof a === 'boolean');//'boolean' true
    	a=null;
    	console.log(typeof a);// 'object'
    
  • === :可以判断undefined 和 null
    	var a;
    	console.log(a ===undefined);//true
    	a=nullj;
    	console.log(a===null);//true
    
  • instanceof :instanceof运算符返回一个布尔值,表示对象是否为某个构造函数的实例,instanceof不能区别undefined和null,而且对于基本类型如果不是用new声明的则也测试不出来,对于是使用new声明的类型,它还可以检测出多层继承关系
    	var b1 = {
    		b2:[1,'abc',console.log],
    		b3:function(){
    			console.log('b3');
    			return function(){
    				return 'function'
    		}
    	};
    	//对象b1是Object的实例对象但不是Array的实例对象
    	console.log(b1 instanceof Object,b1 instanceof Array);//true fasle
    	console.log(b1.b2 instanceof Array,b1.b2 instanceof Object);// true true
    	console.log(b1.b3 instanceof Function , b1.b3 instanceof Object);//true true
    	console.log(b1.b3 typeof === 'function');//true
    	console.log(b1.b2[2] typeof === 'function');//true
    	b1.b2[2](4);//4
    	console..log(b1.b3()());//'function'
    	function Person(){}
    	var per = new Person()
    	console.log(per instanceof Person);// true
    	
    	function Student(){}
    	Student.prototype = new Person()
    	var haoxl = new Student()
    	console.log(haoxl instanceof Student);// true
    	console.log(haoxl instanceof Person);// true
    
  • constructor:constructor不能判断undefined和null,并且使用它是不安全的,因为contructor的指向是可以改变的
    	var bool = true;
    	console.log(bool.constructor === Boolean);// true
    	bool= 1;
    	console.log(num.constructor === Number);// true
    	bool = 'abc'
    	console.log(str.constructor === String);// true
    	bool = undefined
    	bool= null
    	bool = [1,2,3]
    	console.log(arr.constructor === Array);// true
    	bool = {name:'haoxl',age:18}
    	console.log(obj.constructor === Object);// true
    	bool = function(){console.log('I am a function')}
    	console.log(fun.constructor === Function);// true
    	function Person(){}
    	var per = new Person()
    	console.log(per.constructor === Person);// true
    	function Student(){}
    	Student.prototype = new Person()
    	var haoxl = new Student()
    	console.log(haoxl.constructor === Student);// false
    	console.log(haoxl.constructor === Person);// true
    
  • toString.call():不能检测非原生构造函数的构造函数名
        var bool = true
     	var num = 1
     	var str = 'abc'
     	var und = undefined
     	var nul = null
     	var arr = [1,2,3]
     	var obj = {name:'haoxl',age:18}
     	var fun = function(){console.log('I am a function')}
        console.log(Object.prototype.toString.call(bool));//[object Boolean]
     	console.log(Object.prototype.toString.call(num));//[object Number]
     	console.log(Object.prototype.toString.call(str));//[object String]
     	console.log(Object.prototype.toString.call(und));//[object Undefined]
     	console.log(Object.prototype.toString.call(nul));//[object Null]
     	console.log(Object.prototype.toString.call(arr));//[object Array]
     	console.log(Object.prototype.toString.call(obj));//[object Object]
     	console.log(Object.prototype.toString.call(fun));//[object Function]
     	function Person(){}
     	function Student(){}
     	Student.prototype = new Person()
     	var haoxl = new Student()
     	console.log(Object.prototype.toString.call(haoxl));//[object Object]
    
  • jquery中的$.type():内部原理就是用的Object.prototype.toString.call()
    var bool = true
    var num = 1
    var str = 'abc'
    var und = undefined
    var nul = null
    var arr = [1,2,3]
    var obj = {name:'haoxl',age:18}
    var fun = function(){console.log('I am a function')}
    console.log($.type(bool));//boolean
    console.log($.type(num));//number
    console.log($.type(str));//string
    console.log($.type(und));//undefined
    console.log($.type(nul));//null
    console.log($.type(arr));//array
    console.log($.type(obj));//object
    console.log($.type(fun));//function
    function Person(){}
    function Student(){}
    Student.prototype = new Person()
    var haoxl = new Student()
    console.log($.type(haoxl));//object
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值