实例详解JS中的类型检测1:typeof和instanceof
2018-03-09 11:12
721 查看
我们知道,在js中可以将数据类型分为基本类型(Null、Undefined、Boolean、Number、String)和引用类型(Object、Array、Date、RegExp、Function等)。
那么如何判断某个值是基本类型还是引用类型呢?如果已经判断出事引用类型,如何判断它是具体的哪种类型呢?本文将对JS中的常用类型检测方法进行简要分析和总结。
我们可以发现几个特征:
其一,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检测的规律:
1、instanceof可以检测引用类型,不能检测基本类型;
2、instanceof检测Null、Undefined类型报错,原因是第二个操作数不是构造函数;
3、instanceof检测Number、Boolean、String类型结果为false,原因是第一个操作数不是对象;
4、instanceof检测的时候,只要第二个操作数在第一个操作数的原型链上,检测出来的结果都是true;
5、instanceof可以检测是自定义类型。
那么,instanceof检测的原理是什么呢?
如果第一个操作数(对象)是第二个操作数(构造函数)的实例,那么instanceof就返回true。
那么如何判断某个值是基本类型还是引用类型呢?如果已经判断出事引用类型,如何判断它是具体的哪种类型呢?本文将对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。
相关文章推荐
- JS类型检测(typeof和instanceof)
- JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
- 检测类型typeof和instanceof。
- typeof和instanceof检测数据类型
- 数据类型检测之typeof详解
- js 判断各种数据类型 了解js的都知道, 有个typeof 用来判断各种数据类型,有两种写法:typeof xxx ,typeof(xxx) 如下实例:
- JavaScript之检测类型(typeof与instanceof)
- JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
- 如何判断js中的数据类型:typeof、instanceof、 constructor、 prototype方法比较
- 实例详解JS中的类型检测2:constructor和Object.prototype.string.call
- JS中的instanceof和typeof
- instanceof和typeof运算符的区别详解
- Js基础二(字面量、typeof、所类型的boolean值)
- js 检测数据类型instanceof/constructor和 Object.prototype.toString.call()
- JS数据类型&&typeof&&其他
- JavaScript类型判断instanceof与typeof对比
- Js的typeof和Js的基本数据类型
- js中的数据类型和typeof
- js之【typeof和instanceof的区别】
- js判断对象类型 typeof与Object.prototype.toString.call方法的区别