美文网首页
js中检测数据类型

js中检测数据类型

作者: 隔壁甜言 | 来源:发表于2023-11-06 17:08 被阅读0次

    一、typeof

    使用typeof检测数据类型,返回值是一个字符串;
    检测基本数据类型,准确率高;但是对于引用数据类型,准确率低

    1、字符串-----------'string'
    2、数值/NaN-------'number'
    3、布尔值-----------'boolean'
    4、null/object ------'object'

    这是由于历史原因造成的。1995年的 JavaScript 语言第一版,只设计了五种数据类型(对象、整数、浮点数、字符串和布尔值),没考虑null,只把它当作object的一种特殊值。后来null独立出来,作为一种单独的数据类型,为了兼容以前的代码,typeof null返回object就没法改变了。

    typeof window; //'object'
    typeof {}; // 'object'
    typeof []; //'object'
    

    5、函数 -------------'function'
    6、未定义的变量--'undefined'

    二、instanceof

    检测 a 是否是 b 的实例 a instanceof b
    instanceof后跟的是构造函数名称
    返回的是一个布尔值
    注意:所有的对象(function,array,object,基本包装类型)都是Object的实例

    console.log(arr instanceof Array);  //true
    console.log(arr instanceof Object); //true
    console.log(obj instanceof Object); //true
    console.log(obj instanceof Array);  //false
    var num = new Number("11");
    console.log(num instanceof Number); //true
    console.log(num instanceof Object); //true
    

    三、Object.prototype.toString

    最准确的检测方法,可以检测所有的数据类型
    Object.prototype.toString.call(检测的数据).slice(8,-1).toLowerCase(); 得到的是小写的数据类型

    console.log(Object.prototype.toString.call(123));                       //[object Number]
    console.log(Object.prototype.toString.call('123'));                 //[object String]
    console.log(Object.prototype.toString.call(undefined));         //[object Undefined]
    console.log(Object.prototype.toString.call(true));                  //[object Boolean]
    console.log(Object.prototype.toString.call({}));                        //[object Object]
    console.log(Object.prototype.toString.call([]));                        //[object Array]
    console.log(Object.prototype.toString.call(function(){}));    //[object Function]
    console.log(Object.prototype.toString.call(null));                  //[[object Null]]
    

    相关文章

      网友评论

          本文标题:js中检测数据类型

          本文链接:https://www.haomeiwen.com/subject/bucxwdtx.html