2019独角兽企业重金招聘Python工程师标准>>>

由于具体实现上的问题,在实际的项目应用中,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

所以我们一般用“鸭子类型”来做流程控制,好晚了,不多讲,去搜一下吧。

一定要区分这些东西?

Object.prototype.toString()有一个妙用,如果我们以某个特别的对象为上下文来调用该函数,它会返回正确的类型。我们需要做的就是手动处理其返回的字符串,最终便能获得typeof应该返回的正确字符串。

可以用来区分:BooleanNumberStringFunctionArrayDateRegExpObjectError等等。

jQuery.type()就是这样实现的。以下代码从jQuery源码中抽取出来,可以直接用。

var class2type = {} ;
"Boolean Number String Function Array Date RegExp Object Error".split(" ").forEach(function(e,i){class2type[ "[object " + e + "]" ] = e.toLowerCase();
}) ;
//当然为了兼容IE低版本,forEach需要一个polyfill,不作细谈了。
function _typeof(obj){if ( obj == null ){return String( obj );}return typeof obj === "object" || typeof obj === "function" ?class2type[ class2type.toString.call(obj) ] || "object" :typeof obj;
}

使用结果:

_typeof(new String())
->"string"
_typeof("123")
->"string"
_typeof(new RegExp())
->"regexp"
_typeof(null)
->"null"

转载于:https://my.oschina.net/wanjubang/blog/893162

javascript完美判断类型相关推荐

  1. 在javascript中判断类型

    String 一个字符串始终是一个字符串,所以这一块是很容易.除非使用new(new String)调用,否则typeof将返回"object".所以也要包含那些可以使用的字符串i ...

  2. 理解JavaScript的原始类型

    2019独角兽企业重金招聘Python工程师标准>>> JavaScript中的原始类型(primitive type)包括Undefined.Null.Number.Boolean ...

  3. php 判断类型array,判断一个变量是数组Array类型的方法_javascript技巧

    在很多时候,我们都需要对一个变量进行数组类型的判断.JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助. JavaScript中检测对象 ...

  4. html 判断整数,javascript如何判断值是否为整数?

    javascript如何判断一个值是否为整数?下面本篇文章就来给大家介绍一下使用javascript判断一个值是否为整数的方法,希望对大家有所帮助. 方法1:使用取余运算符判断 任何整数都会被1整除, ...

  5. html5判断text文本是数字,JavaScript常用判断写法大全

    js验证表单大全,用JS控制表单提交,具体内容如下所示: 1. 长度限制 function test() { if(document.a.b.value.length>50) { alert(& ...

  6. java两字符串是否相等_Java与JavaScript中判断两字符串是否相等的区别

    JavaScript是一种常用的脚本语言,这也决定了其相对于其他编程语言显得并不是很规范.在JavaScript中判断两字符串是否相等 直接用==,这与C++里的String类一样.而Java里的等号 ...

  7. html中显示变量的数组,javascript如何判断变量是不是数组?

    javascript如何判断变量是不是数组?下面本篇文章就来给大家介绍一下使用javascript判断变量是不是数组的几种方法,希望对大家有所帮助. 方案一:使用instanceof运算符 语法:变量 ...

  8. 方法的返回值类型是object_JavaScript中如何判断类型

    1. typeof typeof (整数/小数/自然对数Math.LN2/正无穷大数Infinity) ===> numbertypeof NaN ===> number typeof ( ...

  9. html怎么判断字段,javascript怎么判断是否为字符串?

    JavaScript变量能够保存多种数据类型:数值.字符串值.数组.对象等等,有时我们需要知道变量中所存储的数据类型,我们该如何判断数据类型呢? JavaScript中判断是否为字符串的方法: 判断是 ...

最新文章

  1. Sublime Text 3 常用插件以及安装方法(转)
  2. newinsets用法java_Java XYPlot.setInsets方法代碼示例
  3. linux中cp:overwrite提示的问题
  4. .NET Core RSA密钥的xml、pkcs1、pkcs8格式转换和JavaScript、Java等语言进行对接
  5. 教小学妹学算法:搜索算法解决迷宫问题
  6. .NET编程-----------------------Web.config配置文件详解
  7. linux空文件夹大小,[转载]linux 查看文件和文件夹大小
  8. error_reporting
  9. python - 乌龟吃鱼游戏
  10. “一个优秀程序员可抵五个普通程序员!”
  11. 【接箱子2.0】新手划过,dalao勿喷
  12. 安卓机更新系统会卡吗_都说安卓手机用一两年就卡到不行,但知道这3招,同样可以用很久...
  13. Elasticsearch:如何使用 Elasticsearch 和 Python 构建面部识别系统
  14. 2020年中国高粱行业发展现状分析,产品多元化发展「图」
  15. android屏幕唤醒函数,android学习笔记 按电源键屏幕唤醒和屏幕睡眠流程(从上层到kernel)...
  16. linux ubuntu环境下 android jdk sdk eclipse adt 以及手机连接无法识别的解决方法
  17. 浅谈PageRank算法
  18. PAT 1009. 说反话
  19. CentOS 如何更改SSH端口的方法
  20. jqurey相关知识点

热门文章

  1. R语言——双样本独立检验的快速分析立检验的快速分析
  2. OriginPro 2021安装教程(手把手式安装)
  3. Dev-C++安装教程附免费安装包资源
  4. 计算机网络 ip协议是,计算机网络知识:TCP/IP协议
  5. 机器人学习--扩展卡尔曼滤波算法用于机器人定位
  6. 机器人学习--粒子滤波及其在定位中的应用
  7. C语言 | C语言实现日历打印
  8. 卷的作用_悄悄告诉你蛋糕卷零失败的秘诀!
  9. static_cast、dynamic_cast、const_cast和reinterpret_cast总结
  10. mysql数据每日更新_[每日更新-MySQL]4.记录操作(数据操作)