• js判断数据类型的几种方式


    一 typeof

    回顾:js有五种基本数据类型:值类型("number","string","boolean","undefined") 和引用类型 (“object”),其中“object” 又包含“array,function,null”等数据类型。
    typeof 可以判断所有的值类型"number","string","boolean","undefined"和引用类型中的‘function’ 类型,其余所有的引用类型都只能返回‘object’。
    typeof 能返回6中数据类型。

    type of 1;//"number"
    type of 'test';//"string"
    type of true;//"boolean"
    type of undefined;//"undefined"
    type of console.log;//"function"
    type of null;//"object"
    type of [];//"object"
    type of {};//"object"
    

    二 instanceof

    优点:可以判断某个对象是否是由某个构造函数new 出来的 ,凡是通过构造函数创建的都能进行判断
    例如:

    //构造函数假如被当作普通函数直接执行抛出错误
    function Person (){
        if(!(this instanceof Person)){  // 当Person被直接执行时,this在非严格模式下是指向window的,而被当作构造函数时,this 是指由Person new出来的对象
            throw new Error(‘Person为构造函数,请使用 new Person’);
        }
    }
    

    缺点:不能判断null 类型以及非new 出来的的值类型,不能精确的区分array、function和object

    function utility(){
        return {
            isAarry:(data)=> data instanceof  Array,
            isFunction:()=> data instanceof Function
        }
    }
    

    三 Object.prototype.toString

    优点:所有的数据类型都能判断
    原理:一切皆对象
    js 里面还有好多类型判断 [object HTMLDivElement] div 对象 , [object HTMLBodyElement] body 对象 ,object Document或者 [object HTMLDocument](firefox,google) ......各种dom节点的判断,这些东西在我们写插件的时候都会用到。

    function utility(){
        return {
            isArray:(o)=>Object.prototype.toString.call(o) == "[object Array]",
            isObj:(o)=>Object.prototype.toString.call(o) == "[object Object]",
            isNull:(o)=>Object.prototype.toString.call(o) == "[object Null]",
            isFunction:(o)=>Object.prototype.toString.call(o) == "[object Function]",
            isDate:(o)=>Object.prototype.toString.call(o) == "[object Date]", 
            isDocument:(o)=>Object.prototype.toString.call(o) =="[object Document]"|| Object.prototype.toString.call(o) == "[object HTMLDocument]",
            isNumber:(o)=>Object.prototype.toString.call(o) == "[object Number]", 
            isString:(o)=>Object.prototype.toString.call(o) == "[object String]", 
            isUndefined:(o)=>Object.prototype.toString.call(o) == "[object Undefined]", 
            isBoolean:(o)=>Object.prototype.toString.call(o) == "[object Boolean]", 
        }
    }
    
  • 相关阅读:
    3dsmax不同版本 pyside qt UI 设置max窗口为父窗口的方法
    oracle中的数据库和实例
    oracle中的表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)
    什么是WSE
    Server.Transfer,Response.Redirect的区别
    Oracle 中的几个数据类型介绍
    oracle中的连接字符串
    Oracle中的 单引号 和 双引号
    接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?
    聚簇索引
  • 原文地址:https://www.cnblogs.com/honkerzh/p/10838212.html
Copyright © 2020-2023  润新知