js判断数据类型方法汇总

JavaScript024

js判断数据类型方法汇总,第1张

在前端开发中我们经用到的操作有很多,比如判断数据类型、去重、深拷贝等等,最近也在整理常用的知识点,便于积累和后期查看,这里呢我对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繁琐一点但是判断全面,所以这两个的结合判断我是比较推荐的。

validator.js是一个对字符串进行数据验证和过滤的工具库,同时支持Node端和浏览器端,github地址是 https://github.com/chriso/validator.js

主要API如下:

验证str中是否含有seed

验证是否相等

验证str是否是一个指定date之后的时间字符串,默认date为现在,与之相反的是isBefore方法

检查是否是布尔值

检查是否是信用卡

检查str是否是一个可以被number整除的数字

检查是否是邮件地址

检查字符串是否为空

是否是域名

是否是浮点数

是否是哈希值

是否是十六进制颜色值,例如#ffffff

是否是十六进制数字

是否是IP地址值,version为4或者6

是否是ISBN号,version为10或者13

是否是整数

使用JSON.parse判断是否是json

判断字符串的长度是否在一个范围内,options默认为{min:0, max: undefined}

是否小写

是否是MAC地址

是否是MD5加密的哈希值

是否是MIME type值

是否是MongoDB的id值

是否仅仅包含数字

是否是一个端口号

是否是一个URL地址

是否大写

是否匹配,利用match方法,其中匹配的模式可以作为第三个参数,当然也可以卸载正则表达式pattern中

移除黑名单中的字符

对< > & ' " /进行HTML转义,与之相反的方法是unescape

对字符进行左缩进,与之对应的右缩进为rtrim方法,两端缩进trim

此外还有toBoolean、toDate、toFloat、toInt、whitelist

1 如果是格式性的验证(不和后台交互) 首先写验证逻辑 如果符合进行下一步,不符合return结束方法

例:

if (gwmc.length >= 200) {

showAlertDialog("岗位名称不能超过100个字符!", null, null)

return

}

if (gwlx == "") {

showAlertDialog("岗位类型不能为空", null, null)

return

} else if (gwmc == "") {

showAlertDialog("岗位名称不能为空", null, null)

return

} else if (ckjls == "") {

showAlertDialog("参考警力数不能为空", null, null)

return

}

2 如果是进入后台查询数据进行判断 也一再ajax回掉函数中和action中写逻辑校验

例:

$.post(context +"/position/savePosition.action", {

"positionBean.name" : gwmc,

"position.name" : gwmc,

"position.positionType" : gwlx,

"position.referPeopleNum" : ckjls,

"position.controlAddr" : kzqymc,

"position.use" : qy

}, function(json) {

var flag = json.flag

//console.log(flag)

if (flag == true) { //后台返回 名称不重复 flag为true 否则位false

showAlertDialog("添加成功", null, null)

undo()

findPosition(0)

change=0

} else {

showAlertDialog("岗位名称不能重复!", null, null) //名称重复 弹框提示

//findByName(gwmc)

findPosition(0) //刷新 列表

}

})

}