javascript 判断数据类型的几种方法

时间:2024-01-11 21:15:38

javascript 判断数据类型的几种方法
一、typeof 直接返回数据类型字段,但是无法判断数组、null、对象


typeof 1
"number" typeof NaN
"number" typeof "1"
"string" typeof true
"boolean" typeof undefined
"undefined" typeof null
"object" typeof []
"object" typeof {}
"object"

其中 null, [], {}都返回 "object"

二、instanceof 判断某个实例是不是属于原型


// 构造函数
function Fruit(name, color) {
this.name = name;
this.color = color;
}
var apple = new Fruit("apple", "red"); // (apple != null)
apple instanceof Object // true
apple instanceof Array // false

三、使用 Object.prototype.toString.call()判断

call()方法可以改变this的指向,那么把Object.prototype.toString()方法指向不同的数据类型上面,返回不同的结果


Object.prototype.toString.call(1)
"[object Number]" Object.prototype.toString.call(NaN);
"[object Number]" Object.prototype.toString.call("1");
"[object String]" Object.prototype.toString.call(true)
"[object Boolean]" Object.prototype.toString.call(null)
"[object Null]" Object.prototype.toString.call(undefined)
"[object Undefined]" Object.prototype.toString.call(function a() {});
"[object Function]" Object.prototype.toString.call([]);
"[object Array]" Object.prototype.toString.call({});
"[object Object]"

最后我们可以定义一个完美的判断数据类型的方法 _typeof()


function _typeof(obj){
var s = Object.prototype.toString.call(obj);
return s.match(/\[object (.*?)\]/)[1].toLowerCase();
}; _typeof([12,3,343]);
"array" _typeof({name: 'zxc', age: 18});
"object" _typeof(1);
"number" _typeof("1");
"string" _typeof(null);
"null" _typeof(undefined);
"undefined" _typeof(NaN);
"number" _typeof(Date);
"function" _typeof(new Date());
"date" _typeof(new RegExp());
"regexp"

来源:https://segmentfault.com/a/1190000018160547