资讯专栏INFORMATION COLUMN

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

NotFound / 1250人阅读

摘要:正确判断数据类型总结记录判断中的数据类型有一下几种方法三方库。只有一个值得数据类型,逻辑上讲,值表示一个空对象指针。

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

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

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

在实际的项目应用中,typeof只有两个用途,就是检测一个元素是否为undefined,或者是否为function。原因如下:
JavaScript Garden整理出来了如下表格

Value               function   typeof
-------------------------------------
"foo"               String     string
new String("foo")   String     object
1.2                 Number     number
new Number(1.2)     Number     object
true                Boolean    boolean
new Boolean(true)   Boolean    object
new Date()          Date       object
new Error()         Error      object
[1,2,3]             Array      object
new Array(1, 2, 3)  Array      object
new Function("")    Function   function
/abc/g              RegExp     object
new RegExp("meow")  RegExp     object
{}                  Object     object
new Object()        Object     object 
2、instanceof
var a = [1,2,3];
var b = new Date();
var c = function(){};

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

alert(a.constructor === Array) ----------> true
alert(b.constructor === Date) -----------> true
alert(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(); 或者根据其具有的方法去判断。不再细述

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99077.html

相关文章

  • 前端知识点总结——JS高级(持续更新中)

    摘要:前端知识点总结高级持续更新中字符串什么是连续存储多个字符的字符数组相同下标遍历选取不同类型不同不通用所有字符串都无权修改原字符串,总是返回新字符串大小写转换统一转大写统一转小写何时不区分大小写时,都需要先转为一致的大小写,再比较。 前端知识点总结——JS高级(持续更新中) 1.字符串 什么是: 连续存储多个字符的字符数组 相同: 1. 下标 2. .length 3. 遍历 4....

    wangzy2019 评论0 收藏0
  • SCORM标准应用编程接口(API)和数据模型(Data Model)学习及总结

    摘要:需要对每个用户的每个内容对象维护一个数据结构。并没有直接和相连,所以是将数据由暂存的内存中取出。采用实现的可用进行数据提交。记录的完成情况,包括未尝试未学习未完成,已完成。 简介 SCORM定义了一个网络化学习的内容聚合模型(Content Aggregaion Model)和学习对象的实时运行环境(Run-time Environment)。简单说,它是为了满足对网络化学习内容的高水...

    ThinkSNS 评论0 收藏0
  • JS函数式编程读书笔记 - 1

    摘要:在近期看到了函数式编程这本书预售的时候就定了下来。主要目的是个人目前还是不理解什么是函数式编程。且和现在在学习函数式编程有莫大的关系。加速大概了解了函数式编程之后。总结看完了第一章也是可以小结一下的函数式编程。 本文章记录本人在学习 函数式 中理解到的一些东西,加深记忆和并且整理记录下来,方便之后的复习。 在近期看到了《JavaScript函数式编程》这本书预售的时候就定了下...

    G9YH 评论0 收藏0
  • js中对数据类型总结判断数据类型的各种方法及优缺点

    摘要:最常见的判断方法它的官方解释操作符返回一个字符串,表示未经计算的操作数的类型。另外,是判断对象是否属于某一类型,而不是获取的对象的类型。多个窗口意味着多个全局环境,不同的全局环境拥有不同的全局对象,从而拥有不同的内置类型构造函数。 js中的数据类型 js中只有六种原始数据类型和一个Object: Boolean Null Undefined Number String Symbol ...

    voyagelab 评论0 收藏0
  • 工行数据中心高级经理 李雁南:接口冒烟测试方法

    摘要:接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。随着案例和执行结果的不断积累,接口测试覆盖会更加充分,统计结果会更加精确。 原文出自【听云技术博客】:http://blog.tingyun.com/web/a... 今年遇到了几个问题,与接口的功能和性能相关,恰巧最近公司也在组织以冒烟测试为主题的活动,于是乎突发奇想,寻思着能否将接口测试与冒烟测试结合起来,发掘一...

    sunny5541 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<