鉴别JS数据类型的全套方法

  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;
}

  

时间: 2024-10-21 11:24:32

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

js 数据类型及其检测方法

1.js数据类型分类: a.基本类型:string.number.undefined.null.boolean b.引用类型: 其他任何一种对象.Object. 2.typeof 操作符可以方便的检测出 string.number.undefined.boolean. typeof 1.1;"number" typeof '';"string" typeof undefined;"undefined" typeof true;"bool

JS数据类型判断的方法

最常用的判断方法:typeof var a='isString'; var b=121221; var c=[1,2,3]; var d=new Date(); var e=function(){ console.log('12'); }; var f=function(){ this.name='22'; }; var g=null; var h=undefined; var i=true; console.log(typeof b) =======> number console.log(t

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

原文地址:由js apply与call方法想到的js数据类型(原始类型和引用类型) js的call方法与apply方法的区别在于第二个参数的不同,他们都有2个参数,第一个为对象(即需要用对象a继承b,那么此时第一个参数就为a,没有则为null),call方法第二个参数为一个列表,可以是 obj.call(null, 1,2,3,4); 而apply第二个参数为数组.这就是区别,下面来说说对它们的认识. apply最常用的就是查找数组中的最大与最小值,还可以将2个数组合并: var max=Mat

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

1.js数据类型分析 (1)基础类型:string.number.boolean.null.undefined (2)引用类型:object-->json.array... 2.点运算  xxx.sss(对象.属性或方法) 任何数据类型都拥有属性和方法 3.字符串的属性和方法 (1)字符串的定义 :string <1> var at="hello world"; <2>var st=new String("hello")(对象形式定义)

js数据类型简单介绍

JS数据类型 ECMAScript中有5种简单的数据类型:Undefined,Null,Boolean,Number,String.还有一种复杂的数据类型--Object(本质上是由一组无序的名值对组成的). typeof操作符--用于检测给定变量的数据类型 "undefined"-未定义 "boolean"-布尔值 "string"-字符串 "number"-数值 "object"-对象或者null &q

Python爬虫总结(二)常见数据类型及其解析方法

Python爬虫总结(二)常见数据类型 上一篇我们简单介绍了如何用Python发送 http/https 请求获取网上数据,从web上采集回来的数据的数据类型有很多种,主要有: 放在HTML里. 直接放在javascript里. 放在JSON里. 放在XML里. 注意:这里很多概念都是web前端开发里的,因为我们采集的大多数数据都来自web,因此了解一些前端知识还是挺有必要的. 下面我简单介绍下各种数据类型,并结合一些实例介绍它们的解析方法. 数据类型 放在HTML里 HTML即超文本标记语言,

由js apply与call想到的js数据类型

js的call方法与apply方法的区别在于第二个参数的不同,他们都有2个参数,第一个为对象(即需要用对象a继承b,那么此时第一个参数就为a,没有则为null),call方法第二个参数为一个列表,可以是 1 obj.call(null, 1,2,3,4); 免费会员网 而apply第二个参数为数组.这就是区别,下面来说说对它们的认识. apply最常用的就是查找数组中的最大与最小值,还可以将2个数组合并: 1 2 3 4 5 6 7 8 9 var max=Math.max.apply(null

js学习笔记——数组方法

join() 把数组中所有元素转化为字符串并连接起来,并返回该字符串, var arr=[1,2,3]; var str=arr.join("#"); //str="1#2#3"; 如果没有指定分隔符,则默认为逗号 var str2=arr.join(); //str2="1,2,3"; reverse() 在原数组上把元素的顺序颠倒过来,并返回该数组 var arr=[1,2,3]; arr.reverse(); //arr=[3,2,1];

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

用typeof 来检测数据类型 Javascript自带两套类型:基本数据类型(undefined,string,null,boolean,function,object)和对象类型. 但是如果尝试用typeof 来检测对象类型都一律返回"object"并不能加以区分 typeof null // "object" typeof [] // "object" typeof document.childNodes //"object&qu