您的位置:首页 > Web前端 > JavaScript

实例详解JS中的类型检测1:typeof和instanceof

2018-03-09 11:12 721 查看
我们知道,在js中可以将数据类型分为基本类型(Null、Undefined、Boolean、Number、String)和引用类型(Object、Array、Date、RegExp、Function等)。

那么如何判断某个值是基本类型还是引用类型呢?如果已经判断出事引用类型,如何判断它是具体的哪种类型呢?本文将对JS中的常用类型检测方法进行简要分析和总结。

一、typeof

最常用的可能是typeof了,我们输入各类型进行检测:

typeof(null);//"object"
typeof(undefined);//"undefined"
typeof(NaN);//"number"
typeof('hello');//"string"
typeof(false);//"boolean"
typeof({});//"object"
typeof([]);//"object"
typeof(new Function());//"function"
typeof(new Date());//"object"
typeof(/\.jpg$/);//"object"


我们可以发现几个特征:

其一,typeof检测结果返回一个字符串,且都是小写字母;

其二,检测值为null的变量返回”object”,即无法正确检测出Null类型;

其三,检测引用类型时除Function类型返回”function”外,其余均返回”object”,即除Function可以检测出以外,无法准确判断出具体的引用类型。

我们需要注意的是:

首先,typeof返回”object”不一定就是引用类型,可能为Null、Object、Array、Date、RegExp。

第二,以前的一些资料中指出typeof检测正则表达式会返回”function”,经在目前的主流浏览器中测试,该问题已改变,返回”object”。

那么,我们改如何应用typeof进行类型检
4000
测呢?

1、可用typeof检测基本类型,但检测Null类型时返回”object”;

2、可用typeof大致判断是否为引用类型,如果返回”object”,则只可能是Object、Array、Date、RegExp、Null中的一种;

3、可用typeof检测出Function类型。

二、instanceof

基本的检测语句如下:

> result = variable instanceof constructor


我们输入如下代码测试:

null instanceof Null;//报错,会提示Null没有定义,因为Null不是构造函数
undefined instanceof Undefined;//报错,会提示Undefined没有定义,因为Undefined不是构造函数

'hello' instanceof String;//false,String是包装类型,因此是构造函数
NaN instanceof Number;//false
false instanceof Boolean;//false

new Object() instanceof Object;//true
new Function() instanceof Function;//true
new Date() instanceof Date;//true
new RegExp() instanceof RegExp;//true

new RegExp() instanceof Object;//true
new RegExp() instanceof Function;//false

function A(){
this.a=1;
}
var a1=new A();
a1 instanceof A;//true


由上,我们发现instanceof检测的规律:

1、instanceof可以检测引用类型,不能检测基本类型;

2、instanceof检测Null、Undefined类型报错,原因是第二个操作数不是构造函数;

3、instanceof检测Number、Boolean、String类型结果为false,原因是第一个操作数不是对象;

4、instanceof检测的时候,只要第二个操作数在第一个操作数的原型链上,检测出来的结果都是true;

5、instanceof可以检测是自定义类型。

那么,instanceof检测的原理是什么呢?

如果第一个操作数(对象)是第二个操作数(构造函数)的实例,那么instanceof就返回true。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: