JS之如何判断数据类型

版权声明:本文为神州灵云作者的原创文章,未经神州灵云允许不得转载。

本文作者:Xiang

1.使用场景

1.1.调试时需要知道某变量的类型,以此来验证部分功能是否正常。

1.2.需求中需要对变量的类型进行判断,从而走入不同的分支,比如:接口返回数据后,对数据类型的判断从而做不同的处理。

1.3.对数据的验证,部分接口对请求参数有一定的要求,在请求接口前将参数判断一遍有利于减少bug的产生。

2.判断方法
2.1. typeof:

用js时,最常用的数据类型判断函数,应该就是 typeof 了,typeof 可以简单判断数据的类型, 比如string; number; boolean; Object; null; undefined,function 等等,但是不支持更细致的Object类型判断,比如数组、各种自定义对象类型等等,如果只是在调试时简单的验证数据是否正常,typeof完全够用。
附上用法:

2.1.1. typeof 空格 操作数

2.2.2. typeof(操作数)

2.2.instanceof

instanceof 运算符与 typeof 运算符相似,同样也是用于识别对象的类型。与 typeof 方法不同的是,instanceof 方法要求开发者明确地确认对象为某特定类型,返回的值是boolean,通过判断对象的类型和设定的类型是否一致,从而返回值。
附上用法:

2.2.1.

boolean result = object instanceof class;
result :布尔类型。
object :必选项。任意对象表达式。
class:必选项。任意已定义的对象类。
值得注意的是,用instanceof 判断对象类型时,如果对象类型继承了另一个对象类型,则用instanceof 去判断object是否和继承的父类一致,也是可行的,举个例子:

2.2.2.

function Aoo(){}
function Foo(){}
Foo.prototype = new Aoo();//JavaScript 原型继承

var foo = new Foo();
console.log(foo instanceof Foo)//true
console.log(foo instanceof Aoo)//true

2.3.Object对象的prototype属性:

Object.prototype.toString.call(obj)可以直接将对应的类型按照string打印出来,和typeof相比,显示的内容更精确一些,而且支持部分objct类型的判断;相比起instanceof来说,显示起来更直观一点,但是在对于自定义对象类型的判断上,还是instanceof更加精确,如果只是判断js常用的内置对象的话,prototype比typeof更好用。
附上用法:

2.3.1.
Object.prototype.toString.call(“jerry”)

console.log(Object.prototype.toString.call(“jerry”));//[object String]
console.log(Object.prototype.toString.call(12));//[object Number]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call({name: “jerry”}));//[object Object]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(new Date));//[object Date]
console.log(Object.prototype.toString.call(/\d/));//[object RegExp]

//下面这个例子可以说明对自定义类型的判断不足之处
function Person(){};
console.log(Object.prototype.toString.call(new Person));//[object Object]

2.4. obj.constructor.name:

每一个对象都有constructor属性,constructor 属性描述的是其构造函数,所以通过constructor.name获取构造函数的名称,这对于判断自定义类型来说,非常友好,不过ie8以下的版本不支持.
附上用法:

2.4.1.

function Aoo(){
return “Aoo”;
}
var aoo = new Aoo();
console.log(aoo.constructor.name); //[Aoo]

3.结束语

通过上述几种方法,可以判断大部分对象的数据类型了,但是随着技术的更新,以后可能有更简单的方法来获取结果,欢迎大家补充。学无止境,诸君,加油呀!

神州灵云公司官网(二维码).png

猜你喜欢

转载自blog.csdn.net/dclingcloud/article/details/86581467