谈到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]
...
希望对大家有所帮助,有错误的地方,还希望大家留着指出,请多多指教。