ECMAScript 标准定义了 7 种数据类型:Boolean、Null、Undefined、Number、String、Symbol(ES6新增)和Object,除Object以外的那6种数据类型也被称为基本数据类型,另外还有Array、Function等复杂数据类型。本文介绍一般类型判断方法,最后总给一套全面的数据类型判断方法。

一、typeof

  typeof是一个一元运算符(不是一个函数方法),可以鉴别null以外的基本数据类型以及Object和Function。它的返回值是小写的字符串:

/**** typeof ****/
typeof 37 ; //输出 "number"
typeof "aaa" ; //输出 "string"
typeof undefined ; //输出 "undefined"
typeof false; //输出 "boolean"
typeof {a:1,b:2}; //输出 "object"
typeof function(){}; //输出 "function" //它不能鉴别null和array
typeof null; //输出 "object"
typeof [1,2]; //输出 "object"

二、Object.prototype.toString.call()

  完美鉴别基本数据类型及Object、Function、Array、Date、Math等等类型

/**** Object.prototype.toString.call ****/
Object.prototype.toString.call("aa"); //输出 "[object String]"
Object.prototype.toString.call(123); //输出 "[object Number]"
Object.prototype.toString.call(null); //输出 "[object Null]"
Object.prototype.toString.call(undefined); //输出 "[object Undefined]"
Object.prototype.toString.call([1,2,3]); //输出 "[object Array]"
Object.prototype.toString.call(function(){}); //输出 "[object Function]"
Object.prototype.toString.call({a:1,b:2}); //输出 "[object Object]"

三、其他判断方法

  Array.isArray()可以判断一个数据是否是数组类型。

  instanceof操作符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。某些情况下也能用来检测数据类型,慎用。

/**** isArray判断数组 ****/
var arrTmp = [1,2];
Array.isArray(arrTmp); //输出true /**** instanceof判断类型,不准确 ****/
var numTmp1 = 123;
var numTmp2 = new Number(123);
numTmp1 instanceof Number; //输出 false
numTmp2 instanceof Number; //输出 true
arrTmp instanceof Array; //输出 true
arrTmp instanceof Object; //输出 true

四、全套判断方法

  (下面这段代码挪自Anguar源码,稍加修整)

var toString = Object.prototype.toString;

function isUndefined(value) {
return typeof value === 'undefined';
}
function isDefined(value) {
return typeof value !== 'undefined';
}
function isObject(value) {
return value !== null && typeof value === 'object';
}
function isString(value) {
return typeof value === 'string';
}
function isNumber(value) {
return typeof value === 'number';
}
function isDate(value) {
return toString.call(value) === '[object Date]';
}
var isArray = Array.isArray;
function isFunction(value) {
return typeof value === 'function';
}
function isRegExp(value) {
return toString.call(value) === '[object RegExp]';
}
function isWindow(obj) {
return obj && obj.window === obj;
}
function isFile(obj) {
return toString.call(obj) === '[object File]';
}
function isFormData(obj) {
return toString.call(obj) === '[object FormData]';
}
function isBoolean(value) {
return typeof value === 'boolean';
}
function isPromiseLike(obj) {
return obj && isFunction(obj.then);
}
function isElement(node) {
return !!(node && (node.nodeName || (node.prop && node.attr && node.find)));
}
function isArrayLike(obj) {
if (obj == null || isWindow(obj)) {
return false;
}
var length = "length" in Object(obj) && obj.length;
if (obj.nodeType === 1 && length) {
return true;
}
return isString(obj) || isArray(obj) || length === 0 || typeof length === 'number' && length > 0 && (length - 1) in obj;
}

  

鉴别JS数据类型的全套方法的更多相关文章

  1. js数据类型的判断方法

    判断js中的数据类型有一下几种方法:typeof.instanceof. constructor. prototype. $.type()/jquery.type(),接下来主要比较一下这几种方法的异 ...

  2. 前端基础——js数据类型及判断方法

    一.数据类型 我们通常熟知的数据类型有六种,包括5种基本数据类型(Number, String, Boolean, Undefined, Null)和一种引用数据类型(Object).ES6又新增了一 ...

  3. JS数据类型判断的方法

    最常用的判断方法:typeof var a='isString'; var b=121221; var c=[1,2,3]; var d=new Date(); var e=function(){ c ...

  4. 由js apply与call方法想到的js数据类型(原始类型和引用类型)

    原文地址:由js apply与call方法想到的js数据类型(原始类型和引用类型) js的call方法与apply方法的区别在于第二个参数的不同,他们都有2个参数,第一个为对象(即需要用对象a继承b, ...

  5. JS 数据类型分析及字符串的方法

    1.js数据类型分析 (1)基础类型:string.number.boolean.null.undefined (2)引用类型:object-->json.array... 2.点运算  xxx ...

  6. 判断数组的方法/判断JS数据类型的四种方法

    参考文: 以下 3 个判断数组的方法,请分别介绍它们之间的区别和优劣Object.prototype.toString.call() . instanceof 以及 Array.isArray() h ...

  7. JS数据类型判断的几种方法

    JS数据类型判断 JavaScript 中常见数据类型有Number.String.Boolean.Object.Array.Json.Function.Date.RegExp.Error.undef ...

  8. 总结的JS数据类型判定(非常全面)

    用typeof 来检测数据类型 Javascript自带两套类型:基本数据类型(undefined,string,null,boolean,function,object)和对象类型. 但是如果尝试用 ...

  9. 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析

    作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...

随机推荐

  1. 【C#】override,Abstract,Virtual 介绍及区别--转载

    要扩展或修改继承的方法.属性.索引器或事件的抽象实现或虚实现,必须使用 override 修饰符. 1. override 方法提供从基类继承的成员的新实现.通过 override 声明重写的方法称为 ...

  2. WordPress上传文件类型限制解决办法

    文件类型不符合安全规则.试试别的文件. 这种错误是由于WordPress中做了文件上传格式的限制,这种限制可以在WordPress中的wp-include/functions.php的get_allo ...

  3. web前端之css快速入门

    css简介 css概述 CSS 指层叠样式表 (Cascading Style Sheets)样式定义如何显示 HTML 元素样式通常存储在样式表中把样式添加到 HTML 4.0 中,是为了解决内容与 ...

  4. LDAP落地实战(二):SVN集成OpenLDAP认证

    上一篇文章我们介绍了LDAP的部署以及管理维护,那么如何接入LDAP实现账号统一认证呢?这篇文章将带你完成svn的接入验证 subversion集成OpenLDAP认证 系统环境:debian8.4 ...

  5. php的isset()和empty()区别

    转载:http://www.cnblogs.com/ndxsdhy/archive/2011/04/02/2003193.html 1.isset()函数 一般用来检测变量是否设置 (是否已经赋值) ...

  6. Linux下安装了Xampp,但命令行使用不了MySQL

    引用:http://www.2cto.com/database/201406/309521.html   刚安装好Xampp,使用localhost也能正常运行, phpMyAdimin也能正常登录 ...

  7. 使用ichartjs进行布局图表页面

    先说官网  http://www.ichartjs.com/ 进入里面会有一个可视化布局系统,布局起来自己想要的样式快捷方便,和bootstrap可视化布局系统是一个道理的.

  8. [codeup] 2046 八皇后

    题目描述 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. 对于某个满足要求的8 ...

  9. Prim算法和Kruskal算法求最小生成树

    Prim算法 连通分量是指图的一个子图,子图中任意两个顶点之间都是可达的.最小生成树是连通图的一个连通分量,且所有边的权值和最小. 最小生成树中,一个顶点最多与两个顶点邻接:若连通图有n个顶点,则最小 ...

  10. springboot 源码笔记

    1.springAppication构造器 基于getSpringFactoriesInstances方法构造如下类(获取文件内容在META-INF/spring.factories文件中) 1.1 ...