文章首发: http://www.cnblogs.com/sprying/p/4349426.html

本文罗列了一般Js类型检测的方法,是构建Js知识体系的一小块,这篇文章是我很早之前总结的。

一、Js中有5种基本数据类型

Undefined 、Null、Boolean、String、Number(包含NaN)

NaN和任何类型的值都不相等,包括NaN;isNaN用来判断数值是不是NaN类型  

二、类型判断

1. isFinite(number)
是不是无穷大。如果是NaN,或者正负无穷大,或者非数字类型,则返回false。 
2. typeof运算符
使用的时候,空格或者typeof(param)
 
返回的值
string
number
boolean
undefined
function
object null也返回object
 
根据以上,判断类型可以如下:
var obtainType = function(o){
var t;
if(o === null ) return “null”;
else if(o !== o) return “NaN”;
else if( (t = typeof o) !== ‘object’) return t;
}
可以识别出null、NaN string number boolean undefined function。
 
上面最后只剩下object,比如数组的识别,自定义类型的识别
 
3. 数组等原生类型的识别,可以采用如下
function obtainType(type) {
return function (obj) {
return Object.prototype.toString.call(obj) === "[object " + type + "]"
}
} var isObject = isType("Object")
var isString = isType("String")
var isArray = Array.isArray || isType("Array")
var isFunction = isType("Function")
4. 自定义类型判断
/**
* 返回函数的名字,可能为空串;不是函数,返回null
*/
Function.prototype.getName = function () {
if ("name" in this) return this.name;
return this.name = this.toString().match(/function\s*([^(]*)\(/)[1];
};
原生类型和自定义类型的object都可以判断了,于是
/**
* 返回:null NaN undefined string number boolean
* function Array String Object(包括一些自定义类型) 自定义类型
*/
var obtainType =function(o){
/**
* 获取参数类型
* 对象直接量、Object.create、自定义构造函数的类属性皆为Object;
* 识别出原生类型 (内置构造函数和宿主对象)
*/
function classOf(obj){
return Object.prototype.toString.call(obj).slice(8, -1);
} /**
* 返回函数的名字,可能为空串;不是函数,返回null
*/
Function.prototype.getName = function () {
if ("name" in this) return this.name;
return this.name = this.toString().match(/function\s*([^(]*)\(/)[1];
};
var t, c, n;
// 处理null值特殊情形
if (o === null) return "null";
// NaN:和自身值不相等
if (o !== o) return "NaN";
// 识别出原生值类型和函数、undefined
if ((t = typeof o) !== "object") return t;
// 识别出原生类型
if ((c = classOf(o)) !== "Object") return c;
// 返回自定义类型构造函数名字
if (o.constructor && typeof o.constructor === "function" &&
(n = o.constructor.getName()))
return n;
return "Object";
};

5.

var strObj = new String('abc');

typeof strObj // "object"

obtainType(strObj) // "String"

三、 其它

1. Dom元素判断
if(dom.nodeType){...Dom...}
if(dom.createElement)
 
2. jQuery等类型判断
$('#aa') instanceof jQuery//不支持跨多窗口和框架子页面
 
3. if(a) a为null undefined 0 "" NaN时自动转换成false
一般推荐的写法
// bad
if (name !== '') {
// ...stuff...
} // good
if (name) {
// ...stuff...
} // bad
if (collection.length > 0) {
// ...stuff...
} // good
if (collection.length) {
// ...stuff...
}

JavaScript中类型检测的更多相关文章

  1. JavaScript中如何检测一个变量是一个String类型?

    typeof x === "string" typeof(x) === "string' // 小写 x.constructor === String // 大写类型 同 ...

  2. Javascript之类型检测

    一.检测原始(基本数据:字符串.数字.布尔.null.undefined)类型. 用typeof检测原始类型:1.对于字符串,typeof返回"string"; 2.对于数字,ty ...

  3. Javascript中类型的判断

    数据类型的判断有这么几种方式 1.一元运算符 typeOf 2.关系运算符 instanceof 3.constructor 属性 4.prototype属性 一.typeof typeof的返回值有 ...

  4. Javascript之类型检测(一)

    js中有7种内置类型,这7种类型又分为2大类:基本数据类型和对象(object) 一.检测原始(基本数据:字符串.数字.布尔.null.undefined.symbol)类型. 用typeof检测原始 ...

  5. JavaScript变量类型检测总结

    JavaScript中的变量类型: 基本类型值:Undefined,Null,Boolean,Number和String. 按值访问(可直接操作保存在变量中的变量值): 复制规则:当复制基本类型值时: ...

  6. JS中类型检测方式

    在js中的类型检测目前我所知道的是三种方式,分别有它们的应用场景: 1.typeof:主要用于检测基本类型. typeof undefined;//=> undefined typeof 'a' ...

  7. Javascript中类型: undefined, number ,string ,object ,boolean

    var a1; var a2 = true;var a3 = 1;var a4 = "Hello";var a5 = new Object();var a6 = null;var ...

  8. JavaScript中如何检测一个变量是一个String类型?请写出函数实现

    方法1. function isString(obj){ return typeof(obj) === "string"? true: false; // returntypeof ...

  9. Javascript 常用类型检测

    1.判断变量是否为数组的数据类型? 方法一 :判断其是否具有"数组性质",如slice()方法.可自己给该变量定义slice方法,故有时会失效. 方法二 :obj instance ...

随机推荐

  1. CentOS关机命令

    Linux centos关机与重启命令详解与实战 Linux centos重启命令: 1.reboot 2.shutdown -r now 立刻重启(root用户使用) 3.shutdown -r 1 ...

  2. BP神经网络研究(一)

    本随笔参考文章:<BP神经网络详解与实例>(链接: https://pan.baidu.com/s/1e2niIvD9KtLXEqwXtgdXxw 密码: vb8d) 本随笔原创,转发请注 ...

  3. 【Selenium专题】 FAQ_对象识别_Compound class names are not supported

    测试代码 public void login(){ WebDriver driver = new ChromeDriver(); driver.get("http://IP:Port/cli ...

  4. docker安装与基本配置

    Docker有很多种安装的选择,我们推荐您在Ubuntu下面安装,因为docker是在Ubuntu下面开发的,安装包测试比较充分,可以保证软件包的可用性.Mac, windows和其他的一些linux ...

  5. Mysql 图形工具 Navicat

    Navicat 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时,可以使用可视化工具Navicat,以图形界面的形式操作MySQL数据库 官网下载:https: ...

  6. 模拟实现strstr和strrstr

    strstr函数用于判断str2是否是str1的子串,如果是,则返回str2在str1中首次出现位置的地址,如果不是则返回NULL.其模拟实现代码如下:#include<iostream> ...

  7. jmeter聚合报告详解

    聚合报告(aggregate report) 对于每个请求,它统计响应信息并提供请求数,平均值,最大,最小值,错误率,大约吞吐量(以请求数/秒为单位)和以kb/秒为单位的吞吐量. 吞吐量是以取样目标点 ...

  8. Android app ADB命令

    * 查看设备 adb devices ps这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 若有多台安卓设备,可以通过在adb后面加上 -s <设备id&g ...

  9. 如何分析python的性能(linux)

    一.多进程: 查看程序所有进程与线程 如果python程序启动后形成多个进程如何判断其关系 显示进程的树状结构.-cp 表示树展开,且显示进程号码 $pstree -cp 显示结果 │ │ │ ├─p ...

  10. [转载]Flip an image in UIImageView using UIView transitionWithView

    View animations on the iPhone are wonderful. Used properly they will delight your users and help you ...