zoukankan      html  css  js  c++  java
  • 鉴别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;
    }
    

      

  • 相关阅读:
    Web的攻击技术
    基于HTTP的功能追加协议
    确认访问用户身份的认证
    基本数据结构的模拟
    BFS与DFS
    KMP算法
    Trie字典树
    C++的结构体使用
    C++入门(命名空间)
    算法:C++入门
  • 原文地址:https://www.cnblogs.com/yangshifu/p/7416214.html
Copyright © 2011-2022 走看看