本文罗列了一般js类型检测的方法,是构建js知识体系的一小块。
一、js中有5种基本数据类型undefined 、null、boolean、string、number(包含nan)
nan和任何类型的值都不相等,包括nan;isnan用来判断数值是不是nan类型
二、类型判断1. isfinite(number)
是不是无穷大,如果不是返回true,如果是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中数据类型检测方法的总结的详细内容。
