博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正确判断js数据类型 总结记录
阅读量:6372 次
发布时间:2019-06-23

本文共 2643 字,大约阅读时间需要 8 分钟。

正确判断js数据类型 总结记录

判断js中的数据类型有一下几种方法:typeof、instanceof、 constructor、 prototype、 三方库。

js六大数据类型

number:   数字,整数、浮点数等等,string:   单引号或者双引号来说明,Boolean:  返回true和false,这两个值不一定对应1和0object:   对象,可以执行new操作符后跟要创建的对象类型的名称来创建。null:     只有一个值得数据类型,逻辑上讲,null值表示一个空对象指针。undefined:未定义,使用var声明变量但未对其初始化时,变量的值就是undefined。

1、typeof

在实际的项目应用中,typeof只有两个用途,就是检测一个元素是否为undefined,或者是否为function。原因如下:

JavaScript Garden整理出来了如下表格

Value               function   typeof-------------------------------------"foo"               String     stringnew String("foo")   String     object1.2                 Number     numbernew Number(1.2)     Number     objecttrue                Boolean    booleannew Boolean(true)   Boolean    objectnew Date()          Date       objectnew Error()         Error      object[1,2,3]             Array      objectnew Array(1, 2, 3)  Array      objectnew Function("")    Function   function/abc/g              RegExp     objectnew RegExp("meow")  RegExp     object{}                  Object     objectnew Object()        Object     object

2、instanceof

var a = [1,2,3];var b = new Date();var c = function(){};alert(a instanceof Array) ---------------> truealert(b instanceof Date) alert(c instanceof Function) ------------> truealert(c instanceof function) ------------> false

3、constructor

var a = [1,2,3];var b = new Date();var c = function(){};alert(a.constructor === Array) ----------> truealert(b.constructor === Date) -----------> truealert(c.constructor === Function) -------> true

注:

      使用instaceof和construcor,被判断的引用类型(Object Array)必须是在当前页面声明的!比如,一个页面(父页面)有一个框架,框架中引用了一个页面(子页面),在子页面中声明了一个array,并将其赋值给父页面的一个变量,这时判断该变量,Array ==object.constructor;会返回false;
原因:
1、array属于引用型数据,在传递过程中,仅仅是引用地址的传递。
2、每个页面的Array原生对象所引用的地址是不一样的,在子页面声明的array,所对应的构造函数,是子页面的Array对象;父页面来进行判断,使用的Array并不等于子页面的Array。

4、Object.prototype.toString(通用)

Object.prototype.toString.call()
var toString = Object.prototype.toString;toString.call(undefined);  -------------> [object Undefined]toString.call(null);       -------------> [object Null]toString.call(new Date);   -------------> [object Date]toString.call(new String); -------------> [object String]toString.call(Math);       -------------> [object Math]

jQuery.type()源码

var class2type = {} ;"Boolean Number String Function Array Date RegExp Object Error".split(" ").forEach(function(e,i){    class2type[ "[object " + e + "]" ] = e.toLowerCase();}) ;function _typeof(obj){    if ( obj == null ){        return String( obj );    }    return typeof obj === "object" || typeof obj === "function" ?        class2type[ class2type.toString.call(obj) ] || "object" :        typeof obj;}

注:数组还可以用 Array.isArray(); 或者根据其具有的方法去判断。不再细述

转载地址:http://uiyqa.baihongyu.com/

你可能感兴趣的文章
Mysql索引的类型
查看>>
Eclipse debug模式 总是进入processWorkerExit
查看>>
Nginx的https配置记录以及http强制跳转到https的方法梳理
查看>>
springcloud(十三):Eureka 2.X 停止开发,但注册中心还有更多选择:Consul 使用详解...
查看>>
关于Boolean类型做为同步锁异常问题
查看>>
TestLink运行环境:Redhat5+Apache2.2.17+php-5.3.5+MySQL5.5.9-1
查看>>
Get File Name from File Path in Python | Code Comments
查看>>
显示本月每一天日期
查看>>
[转]java 自动装箱与拆箱
查看>>
NET的堆和栈04,对托管和非托管资源的垃圾回收以及内存分配
查看>>
think in coding
查看>>
IdHttpServer实现webservice
查看>>
HTML的音频和视频
查看>>
Unsupported major.minor version 52.0
查看>>
面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式
查看>>
优酷网架构学习笔记
查看>>
把HDFS里的json数据转换成csv格式
查看>>
WEEX-EROS | 集成并使用 bindingx
查看>>
广州牵引力来告诉你学编程先学什么语言好?
查看>>
广州牵引力总结初学者怎样学好UI设计?
查看>>