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. (转)用Python写堡垒机项目

    原文:https://blog.csdn.net/ywq935/article/details/78816860 前言 堡垒机是一种运维安全审计系统.主要的功能是对运维人员的运维操作进行审计和权限控制 ...

  2. javascript中的浅拷贝和深拷贝 分类: JavaScript 2015-05-07 15:29 831人阅读 评论(1) 收藏

    1.js对象浅拷贝 简单的赋值就是浅拷贝.因为对象和数组在赋值的时候都是引用传递.赋值的时候只是传递一个指针. 看下面的实例代码: var a = [1,2,3]; var b =a ; var te ...

  3. VMware Workstation 11 中 Ubuntu 14.04 的 VMware Tools 问题 :没有显示共享文件夹

      症状:主要表现在Win7中用VM11安装的Ubuntu14.04中,安装完自带的VMware Tools之后,/mnt/hgfs 中没有前面已经设置好的共享文件夹.   仔细查看了安装过程,发现在 ...

  4. GCC 编译 Windows API 程序

    前言 这学期学可视化程序设计,要使用 Windows API 绘制界面,由于笔者的笔记本硬盘太小,无法装臃肿的 VS(主要是不想装),也不想用 VC++ 6.0,所以就选用 GCC 来编译. 安装 m ...

  5. java学习-sha1散列算法

    直接调用HashKit.sha1(String str)方法就可以了,,返回的是16进制的字符串长度是40, 也就是用md.digest()方法解析出来的字节数是160字节长度. 而MD5散列算法生成 ...

  6. mongodb limit()和skip()

    MongoDB Limit() 方法 如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的 ...

  7. Go RabbitMQ (一)

    RabbitMQ 简介 RabbitMQ是一个消息代理,用来负责接收和转发消息. 术语 生产者:生产者是负责发送消息的 队列:队列是RabbitMQ用来存储消息的,受主机内存和磁盘大小的限制,本质上是 ...

  8. 通过六个题目彻底掌握String笔试面试题

    http://blog.csdn.net/chj97/article/details/6899598 1 public static void main(String[] args) { String ...

  9. 模块打包工具webpack

    1.webpack的安装 1.1在安装node的基础上,npm install -g webpack(window版本,因为是全局安装,所以无所谓是哪个路径下) 1.2新建一个文件夹用于此项目  eg ...

  10. 关于around_filter 的调用

      def call_filter(chain, index) return (performed? || perform_action_without_filters) if index >= ...