前端判断数据类型
目前前端的数据类型有 8 种,其中 7 种 为基础类型和一种特殊的 引用类型
基础类型:Number、String、Null、undefined、Boolean、Symbol、BigInt
引用类型:Objetc
值得注意的是其中 BigInt 是一种内置对象,它提供了一种方法来表示大于 253 - 1 的整数。这原本是 Javascript中可以用 Number 表示的最大数字。BigInt 可以表示任意大的整数,一般我们用在数字后面加n或者是函数bigInt()来调用;
那么我们在一下具体的逻辑业务中需要判断一些数据的类型,所以我总结了一些比较常用的判断数据方法如下:
typeof
使用方法列如typeof 12 == "number"
除了下面几种特殊情况都可以正常返回
typeof null
返回类型错误,返回object- 引用类型,除了function返回function类型外,其他均返回object。
其中,
null
有属于自己的数据类型Null
, 引用类型中的 数组、日期、正则 也都有属于自己的具体类型,而typeof
对于这些类型的处理,只返回了处于其原型链最顶端的Object
类型,没有错,但不是我们想要的结果。toString 这个是最完美的
toString() 是 Object 的原型方法,调用该方法,默认返回当前对象的
[[Class]]
。这是一个内部属性,其格式为 [object Xxx] ,其中 Xxx 就是对象的类型具体的使用方法为
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Object.prototype.toString.call('') ; // [object String]
Object.prototype.toString.call(1) ; // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
Object.prototype.toString.call(Symbol()); //[object Symbol]
Object.prototype.toString.call(undefined) ; // [object Undefined]
Object.prototype.toString.call(null) ; // [object Null]
Object.prototype.toString.call(new Function()) ; // [object Function]
Object.prototype.toString.call(new Date()) ; // [object Date]
Object.prototype.toString.call([]) ; // [object Array]
Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
Object.prototype.toString.call(new Error()) ; // [object Error]
Object.prototype.toString.call(document) ; // [object HTMLDocument]
Object.prototype.toString.call(window) ; //[object global] window 是全局对象 global 的引用constructor(构造函数)
constructor
是原型prototype
的一个属性,当函数被定义时候,js引擎会为函数添加原型prototype,并且这个prototype
中constructor
属性指向函数引用, 因此重写prototype
会丢失原来的constructor
。1
'123'.constructor=='String'
但是有一个问题就是
null
和undefined
没有构造函数instanceof
该方法为是用来判断 A 是否为 B 的实例,表达式为:
A instanceof B
,如果 A 是 B 的实例,则返回true
,否则返回false
。 在这里需要特别注意的是:instanceof
检测的是原型1
2
3
4
5
6
7
8
9{} instanceof Object; //true
[] instanceof Array; //true
[] instanceof Object; //true
"123" instanceof String; //false
new String(123) instanceof String; //trueArray.isArray
因数组类型常常被使用,故在数组的api中提供了这个单独对数组的判断方法
改方法只针对数组的判断,非数组类型直接返回null
1
2alert(Array.isArray({})); // false
alert(Array.isArray([])); // true