资讯专栏INFORMATION COLUMN

类型检查

robin / 1334人阅读

摘要:类型检查中有中基本数据类型,分别是还有一种复杂数据类型是松散类型的,所以使用以上种数据类型,就可以表示所有数据。从上面结果可以看到,使用在检查数组,对象,正则表达式时都会返回如此模糊的类型检查方法,应用场景也十分有限。

js 类型检查

js中有5中基本数据类型,分别是:

 Undefined,Null,Boolean,Number,String

还有一种复杂数据类型

  Object

ECMAScript是松散类型的,所以使用以上6种数据类型,就可以表示所有数据。
那么,如何检测变量的数据类型呢。

下面就介绍几种在业务代码中,常用的几种常用类型检查方法

typeof

typeof操作符用以获取一个变量或者表达式的类型。

typeof一般只能返回如下几个结果:
 - "number",  ------eg:  typeof 2 
 - "boolean",  -----     eg:  typeof false 
 - "string", --------       eg:  typeof "123" 
 - "function"(函数,),------ eg:  typeof function(){} 
 - "object"(null,数组,对象,正则表达式),  ---  typeof /s/ 
 - "undefined"。   ------    typeof hehe 
 

从上面结果可以看到, 使用typeof 在检查 null,数组,对象,正则表达式时都会返回"object"
如此模糊的类型检查方法,应用场景也十分有限。

instanceof

如果想知道一个变量到底是什么类型的 “object”,就可以使用instanceof,

  var pattern = /s/;
  var arr = [1,2,3];
  var obj = new Object();

  alert(pattern instanceof RegExp);   // true
  alert(arr instanceof Array);        //true
  alert(obj instanceof Object);        //true
  alert(null instanceof Object);      // false;

也可以用来检查自己创建的变量:

var a = new Array(); 
console.log(a instanceof Array) // 返回true。 
console.log(a instanceof Object) // 返回  Array 是object 的子类。也会返回true.

但是这个操作符的问题在于它假定只存在一个全局的执行环境,存在多个框架的情景下,会存在两个不同的数组构造函数,这里就引入了另一个方法来判断数组

isArray()

ECMAScript5 新增的Array.isArray() 方法,无论执行环境,只有一个目的,判断是不是数组

Object.prototype.toString.call()

原生的toString() 方法,都会返回一个[object NativeConstructorName] 格式的字符串,
通过判断每个类在内部的[[Class]] 属性,来检查类型

    var a = new Array()
    Object.prototype.toString.call(a) == "[object Array]"`
    // 使用这种方法不仅可以判断数组,还可以判断其他类型。
   Object.prototype.toString.call(value) =="[object Function]"
    {}.prototype.toString.call(value) =="[object JSON]" //这种方法也可以 检查原生的JSON对象
$.type

zeptov1.0+
具体用法可以查看 官网文档,用法如下

$.type(object)   ⇒ string
获取JavaScript 对象的类型。可能的类型有:
null undefined boolean number string function array date regexp object error。

alert($.type([]))  // "array"
alert($.type("11"))  // "string"
alert($.type({}))    // "object"

然后,我们可以分析下,这个$.type 方法,使用的技巧是否不同于上面几种类型检查方法
查看 zepto@1.1.6 的源码,基本和上面的 toString.call() 方法类似

type 方法的部分如下

  function type(obj) {
    return obj == null ? String(obj) :
      class2type[toString.call(obj)] || "object"
  }

代码的关键部分,就是这个class2type 对象里面存放了所有数据类型对应的字符串,使用type 方法是,直接取class2type 里面的键值对即可。

再往下看,就可以发现 使用each 方法 ,遍历所有可能的数据类型,为class2type赋值。

  $.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
    class2type[ "[object " + name + "]" ] = name.toLowerCase()
  })

这里得到的 class2type 结果是:

 {
   [object Array]:"array"
   [object Boolean]:"boolean"
   [object Date]:"date"
   [object Error]:"error"
   [object Function]:"function"
   [object Number]:"number"
   [object Object]:"object"
   [object RegExp]:"regexp"
   [object String]:"string"
}

当然,我们可以直接把class2type 对象拿来使用。

...

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

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

相关文章

  • 介绍几款 Python 类型检查工具

    摘要:近日,微软在上开源了一个静态类型检查工具,引起了社区内的多方关注。在微软推出之前,主流的静态检查工具有三款官方的出的出的。微软的有个模式,应该是吸收了这点,而且更加好用因为不需要额外安装和其它依赖。 showImg(https://segmentfault.com/img/bVbqujh?w=5700&h=3601);近日,微软在 Github 上开源了一个 Python 静态类型检查...

    Alex 评论0 收藏0
  • Flow, 一个新的Javascript静态类型检查

    摘要:原文链接翻译于今天我们兴奋的发布了的尝鲜版,一个新的静态类型检查器。为添加了静态类型检查,以提高开发效率和代码质量。这最终形成一个高度并行增量式的检查架构,类似。知道缩小类型范围时做动态检查的影响。 原文链接:https://code.facebook.com/posts/1505962329687926/flow-a-new-static-type-checker-for-java...

    liangzai_cool 评论0 收藏0
  • 第3章:抽象数据类型(ADT)和面向对象编程(OOP) 3.1数据类型类型检查

    摘要:所有变量的类型在编译时已知在程序运行之前,因此编译器也可以推导出所有表达式的类型。像变量的类型一样,这些声明是重要的文档,对代码读者很有用,并由编译器进行静态检查。对象类型的值对象类型的值是由其类型标记的圆。 大纲 1.编程语言中的数据类型2.静态与动态数据类型3.类型检查4.易变性和不变性5.快照图6.复杂的数据类型:数组和集合7.有用的不可变类型8.空引用9.总结 编程语言中的数据...

    zhangqh 评论0 收藏0
  • JavaScript 需要检查变量类型

    摘要:一返回值调用外部方法获取的值需要对类型做判断,因为我们对方法返回的值是有期望值类型,但是却不能保证这个接口返回的值一直是同一个类型。 19年目标:消灭英语!我新开了一个公众号记录一个程序员学英语的历程 有提升英语诉求的小伙伴可以关注公众号:csenglish 程序员学英语,每天花10分钟交作业,跟我一起学英语吧 javascript作为一门动态类型语言,具有很高的动态灵活性,当定义函数...

    Songlcy 评论0 收藏0
  • 前端进阶(5) - js 扩展:静态类型检查(facebook flow)

    摘要:扩展静态类型检查语言与系列等语言有一点很大的不同,就是语言是弱类型语言。但其实很多开发人员还是比较喜欢用来开发项目,所以开发出来帮助语言扩展静态类型检查功能,规避上面提到的问题。 js 扩展:静态类型检查(facebook flow) js 语言与 java、C 系列等语言有一点很大的不同,就是 js 语言是弱类型语言。js 语言的这个特性可能让大家觉得 js 很自由,没有强制性的约束...

    孙淑建 评论0 收藏0
  • HelloType:JS运行时数据类型检查工具

    摘要:进入主页使用文档是一个设计简单的运行时的数据类型检查工具,它可以帮助你的程序在使用某个组变量前,对变量的数据类型进行检查,防止在使用变量进行运算时由于数据类型不同导致报错。 showImg(https://segmentfault.com/img/bVbfW41?w=1380&h=500); 进入GitHub主页使用文档 HelloType是一个api设计简单的js运行时的数据类型检查...

    Heier 评论0 收藏0

发表评论

0条评论

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