背景
此文介绍部分 JS 中用来判断数据类型的方法。JS中数据类型有:空字符串、null、undefined、NaN、number、boolean、string、object、array,等。
其中的 Boolean 值判断为 false 的有:空字符串、null、undefined、NaN、0、false,
其余所有都为 true。
如下介绍其中最基本的六种数据类型的判断方法。
方法一:typeof
var num = 1; var str = "hello"; var bool = true; var n = null; var arr = [1,2,3]; var obj = {"name":"Jet"}; var fun = function(){console.log(1)} console.log(typeof num); // number console.log(typeof str); // string console.log(typeof bool); // boolean console.log(typeof n); // object console.log(typeof arr); // object console.log(typeof obj); // object console.log(typeof fun); // function测试发现,数组、对象、null,都显示 object,所以需要更换方法进行获取。
方法二:instanceof 和 constructor
① instanceof 这个方法其实只能用来判断是否是数组或对象,但是测试发现,数组其实也是对象。var arr = [1,2,3]; var obj = {"name":"Jet"}; console.log(arr instanceof Array); // true console.log(arr instanceof Object); // true console.log(obj instanceof Array); // false console.log(obj instanceof Object); // true② constructor 此方法其实也只用于判断是否是数组或对象,
var arr = [1,2,3]; var obj = {"name":"Jet"}; console.log(arr.constructor == Array); // true console.log(arr.constructor == Object); //false console.log(obj.constructor == Array); // false console.log(obj.constructor == Object); // true
方法三:jQuery 系列
jQuery 中有 $.isPlainObject()、$.isArray(obj)、$.isFunction(obj) 来进行判断,但是也有限,所以我们就需要下面描述的万能之法。方法四:toString() 无敌万能方法
此方法是万能的。var num = 1; var str = "hello"; var bool = true; var n = null; var arr = [1,2,3]; var obj = {"name":"Jet"}; var fun = function(){console.log(1)} console.log(Object.prototype.toString.call(num)); // [object Number] console.log(Object.prototype.toString.call(str)); // [object String] console.log(Object.prototype.toString.call(bool)); // [object Boolean] console.log(Object.prototype.toString.call(n)); // [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 getObjType(obj){ var type = Object.prototype.toString.call(obj); return type.substring(7, type.length-1) }
文章评论