美文网首页
JS 数据类型检测

JS 数据类型检测

作者: 双人赫 | 来源:发表于2022-03-16 17:59 被阅读0次

先简单介绍一下JS的基本数据类型:

    基本类型:Undefined、Null、Boolean、Number和String。

    引用类型:Object(Array-数组对象    RegExp-正则对象    Date-时间对象    Math-数学对象     Function-函数对象)

进行数据检测的几种方法:

第一种方法:typeof

这是一种比较常见的监测数据类型的方法,各种类型检测结果如下:

typeof 1 // 'number'
typeof '1' // 'string'
typeof undefined // 'undefined'
typeof true // 'boolean'
typeof Symbol() // 'symbol'
typeof null // 'object'
typeof [] // 'object'
typeof {} // 'object'
typeof console // 'object'

这里需要注意的是

typeof null // 'object'

type of null 会输出object,但是这是JS的一个bug,不代表null就是引用类型值,所以,我们再判断一个值是否为null 的时候,通过‘===null’来判断就可以了;

而且可以看到,除了function以外,其它引用类型值在被typeof后,显示的都是‘object’;

第二种方法:instanceof

instanceof的用法:我们 new 一个对象,那么这个新对象就是它原型链继承上面的对象了,通过 instanceof 我们能判断这个对象是否是之前那个构造函数生成的对象,这样就基本可以判断出这个新对象的数据类型。下面通过代码来了解一下

let Car = function() {}
let benz = new Car()
benz instanceof Car // true
let car = new String('Mercedes Benz')
car instanceof String // true
let str = 'Covid-19'
str instanceof String // false

区别:

    instanceof 可以准确地判断复杂引用数据类型,但是不能正确判断基础数据类型;
    typeof 也存在弊端,它虽然可以判断基础数据类型(null 除外),但是引用数据类型中,除了 function 类型以外,其他的也无法判断。

第三种方法:Object.prototype.toString

toString() 是 Object 的原型方法,调用该方法,可以统一返回格式为 “[object Xxx]” 的字符串,其中 Xxx 就是对象的类型。对于 Object 对象,直接调用 toString() 就能返回 [object Object];而对于其他对象,则需要通过 call 来调用,才能返回正确的类型信息:

Object.prototype.toString({})       // "[object Object]"
Object.prototype.toString.call({})  // 同上结果,加上call也ok
Object.prototype.toString.call(1)    // "[object Number]"
Object.prototype.toString.call('1')  // "[object String]"
Object.prototype.toString.call(true)  // "[object Boolean]"
Object.prototype.toString.call(function(){})  // "[object Function]"
Object.prototype.toString.call(null)   //"[object Null]"
Object.prototype.toString.call(undefined) //"[object Undefined]"
Object.prototype.toString.call(/123/g)    //"[object RegExp]"
Object.prototype.toString.call(new Date()) //"[object Date]"
Object.prototype.toString.call([])       //"[object Array]"
Object.prototype.toString.call(document)  //"[object HTMLDocument]"
Object.prototype.toString.call(window)   //"[object Window]"

这个返回的就比较准确了。

结合1、3总结一个全局通用的数据类型判断的总方法:

function getType(obj){
  let type  = typeof obj;
  if (type !== "object") {    // 先进行typeof判断,如果是基础数据类型,直接返回
    return type;
  }
  // 对于typeof返回结果是object的,再进行如下的判断,正则返回结果
  return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1');  // 注意正则中间有个空格
}
/* 代码验证,需要注意大小写,哪些是typeof判断,哪些是toString判断?思考下 */
getType([])     // "Array" typeof []是object,因此toString返回
getType('123')  // "string" typeof 直接返回
getType(window) // "Window" toString返回
getType(null)   // "Null"首字母大写,typeof null是object,需toString来判断
getType(undefined)   // "undefined" typeof 直接返回
getType()            // "undefined" typeof 直接返回
getType(function(){}) // "function" typeof能判断,因此首字母小写
getType(/123/g)      //"RegExp" toString返回

相关文章

  • Js类型相关总结

    Js的基本数据类型 复杂数据类型 类型检测 typeof 检测检测原理是根据变量存储时低位 instanceof检...

  • 数据类型的检测

    JS中的数据类型检测 typeof 用来检测数据类型的运算符语法:typeof [value]返回结果:首先是一...

  • JavaScript数据类型检测总结

    在js中,有四种用于检测数据类型的方式,分别是: typeof用来检测数据类型的运算符 instanceof 检...

  • JavaScript数据类型检测总结

    在js中,有四种用于检测数据类型的方式,分别是: typeof用来检测数据类型的运算符 instanceof 检...

  • 三、JS 进阶--判断 JS 的数据类型

    判断 JS 的数据类型 判断 JS 数据类型,也就是我们说的类型检测,本文提供五种方法,分别是 typeof 运算...

  • 三、JS 进阶--判断 JS 的数据类型

    判断 JS 的数据类型 判断 JS 数据类型,也就是我们说的类型检测,本文提供五种方法,分别是 typeof 运算...

  • 原生Js数据类型及操作知识点总结

    原生Js的数据类型总结 1.基本数据类型与其检测方法 String,Undefined,Boolean,null,...

  • JS的数据类型检测

    JS的数据类型检测1、typeof:用来检测数据类型的运算符基于typeof检测出来的结果:首先是一个字符串,字符...

  • JS数据类型检测

    之前有讲过JS数据类型,但是怎么判断到底是某个数据是什么数据类型?今天就来讲一下。JS数据类型检测常用的主要有四种...

  • Javascript常见问题(一)

    1.typeof 和 instanceof检测数据类型有哪些异同 首先我们先要了解js有哪些数据类型?原始类型(基...

网友评论

      本文标题:JS 数据类型检测

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