js如何判断变量的数据类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js如何判断变量的数据类型相关的知识,希望对你有一定的参考价值。
检测简单的数据类型的方法
typeof方法用于检测简单的数据类型如typeof 12
instanceof的实例方法检测如[] instanceof Array // true
arr.constructor == Array判断arr的构造函数是否为数组,如果是则arr是数组
Array.isArray([])判断是否是数组
精确判断数据类型Object.prototype.toString.call(arr)
使用typeof关键字, 可以得到数据类型的字符串表示(全部为小写):
var a = 0, b= true, c="text", d = x: 0, e=[1,2];var f = function(), h = null, i
if(typeof a === "number") a = a*2;
typeof a; // "number"
typeof b; // "boolean"
typeof c; // "string"
typeof d; // "object"
typeof e; // "object"
typeof f; // "function"
typeof h; // "object"
typeof i; // "undefined"
可以看出对于null, , []返回的类型都是"object", 可进一步判断:
var o = ;if(typeof o === "object")
if(o === null)
// null
else if(Array.isArray(o))
// 数组
else
//普通object对象
一般情况下, 我们不需要全面判断数据类型, 例如往往只要判断是否为xxx数据类型, 用以上方法足够, 但显然上面的方法在判断object对象时有点繁琐, 所以大多数js类库中提供有扩展方法, 这些库一般采用的方法如下:
Object.prototype.toString.call(100); //"[object Number]"Object.prototype.toString.call('100'); //"[object String]"
Object.prototype.toString.call(undefined); //"[object Undefined]"
Object.prototype.toString.call(true); //"[object Boolean]"
Object.prototype.toString.call(null); //"[object Null]"
Object.prototype.toString.call(); //"[object Object]"
Object.prototype.toString.call([]); //"[object Array]"
Object.prototype.toString.call(function () ); //"[object Function]"
js判断数据类型方法汇总
参考技术A 在前端开发中我们经用到的操作有很多,比如判断数据类型、去重、深拷贝等等,最近也在整理常用的知识点,便于积累和后期查看,这里呢我对js中数据类型判断方法以及判断结果进行了汇总。一、汇总表格
二、4种方式说明
1、typeof
对于原始类型:除了null其它都可以显示正确
对于对象的话:除了function 其它均显示为 “object”
2、 instanceof : 内部机制是通过原型链来判断的 方法是 a instanceof b (a是不是b的实例)
针对于对象:可以很明显的区分Array、Date、regExp,但是他们都是Object的实例。所以,instanceof 最好是用来判断两个对象是否属于实例关系, 而不是判断一个对象实例具体属于哪种类型。
3、constructor a.constructor===Function / Symbol / String / Number / Boolean / Object / RegExp / Date
对于原始类型:无法处理null、undefined(这两个会报错)
对于对象:均可以判断
函数的 constructor 是不稳定的,这个主要体现在自定义对象上,当开发者重写 prototype 后,原有的 constructor 引用会丢失,constructor 会默认为 Object
4、 toString
toString() 是 Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]] 。这是一个内部属性,其格式为 [object Xxx] ,其中 Xxx 就是对象的类型。
对于 Object 对象,直接调用 toString() 就能返回 [object Object] 。而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。
可以判断所有类型: Object.prototype.toString.call(xxx) 对向的话可以直接使用 Object.toString(obj)
三、整理一个可以判断任意数据类型的方法
注意:在es6中用class定义类的时候,通过typeof判断出的结果是Function,而通过Object.toString判断的结果是Object。js中class应该是Function类型,所以这点需要注意。
function getType(para) //判断任意数据类型
const type = typeof para;
if (type === "number" && isNaN(para)) return "NaN";
if (type !== "object") return type;
return Object.prototype.toString
.call(para)
.replace(/[\[\]]/g, "")
.split(" ")[1]
.toLowerCase();
四、小结
js中数据类型判断的方式有4种:typeof、instance、constructor、toString,typeof简单方便,比较适合原始类型判断,toString繁琐一点但是判断全面,所以这两个的结合判断我是比较推荐的。
以上是关于js如何判断变量的数据类型的主要内容,如果未能解决你的问题,请参考以下文章