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