首页 > web前端 > js教程 > 正文

JavaScript中数据类型检测方法的总结

黄舟
发布: 2017-03-14 15:08:54
原创
1265人浏览过

本文罗列了一般js类型检测的方法,是构建js知识体系的一小块。

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

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

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

二、类型判断

1. isFinite(number)
是不是无穷大,如果不是返回true,如果是NaN,或者正负无穷大,或者非数字类型返回false

2. typeof运算符
使用的时候,空格或者typeof(param)

立即学习Java免费学习笔记(深入)”;

返回的值

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。

BibiGPT-哔哔终结者
BibiGPT-哔哔终结者

B站视频总结器-一键总结 音视频内容

BibiGPT-哔哔终结者 28
查看详情 BibiGPT-哔哔终结者

上面最后只剩下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中数据类型检测方法的总结的详细内容,更多请关注php中文网其它相关文章!

相关标签:
java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号