JS中数据类型检测方法总结
JS中数据是松散数据类型,总结了几种方式来判断它们的数据类型具体是什么。
数据类型的分类:简单数据类型 和 复杂数据类型
- 简单数据类型:数值型,布尔型,字符串型,null,undefined;
- 复杂数据类型:引用对象(数组,对象,函数);
第一种:typeof 操作符
语法:
typeof 变量;
typeof(变量);
数据检测类型:
console.log(typeof 123); //number
console.log(typeof '123'); //string
console.log(typeof false); //boolean
console.log(typeof undefined); //undefined
console.log(typeof null); //object
console.log(typeof function fn() { }); //function
console.log(typeof [1, 21]); //object
console.log(typeof { name: 'zhangsan', age: 22 }); //object
总结:null的类型检测是归为了object,而function是一个函数对象,其他数组和对象都只能检测为object对象。不能更具体的检测类型。
第二种instanceof操作符
语法: 变量 instanceof 具体数据类型; 结果返回一个布尔值,显示变量是否是检测的具体数据类型。更多用来检测引用数据类型。
var arr = [1, 2, 3];
var obj = {
name: 'zhangsan',
age: 22
};
function fn() {
console.log('1');
};
function Person() {
// console.log('person');
}
var p = new Person();
console.log(arr instanceof Array); //true
console.log(arr instanceof Object); //true
console.log(obj instanceof Array); //false
console.log(obj instanceof Object); //true
console.log(p instanceof Person); //true
console.log(p instanceof Object); //true
第三种:Object.prototype.toString.call(变量)检测数据类型;
// 检测数据类型
function typeData(data) {
var d = Object.prototype.toString.call(data); //"[object String]"
return d.slice(8, -1);
}
console.log(typeData(2)); //Number
console.log(typeData('asd')); //String
console.log(typeData(true)); //Boolean
console.log(typeData(function fn() { })); //Function
console.log(typeData(null)); //Null
console.log(typeData(undefined)); //Undefined
console.log(typeData([1, ''])); //Array
console.log(typeData({})); //Object
console.log(typeData(/2/)); //RegExp
每种各有好处,随情况实用;