javascript中数据类型的几种判断方式
在开发中,我们经常需要对数据类型进行判断,再做不同的操作,这篇文章将讲解在 javascript 中对不同数据类型进行判断的方式。
数据类型
既然要判断 javascript 中的数据类型,那么首先你需要知道在 javascript 中有哪些数据类型。
基本数据类型
Number类型
数值类型,如:0, 1, -1, 2.3 , Infinity , -Infinity 等都是 Number类型。
String类型
字符串类型,如:'foo' , '123' 等都是 String 类型。
Boolean类型
值为 true 或 false。
引用类型
Array类型
数组类型,如:let arr = [1,2] 或 let arr = new Array(1,2)。
Object类型
对象类型,如:let obj = { name: 'foo' } 或 let obj = new Object({name: 'bar'})。
Function
函数申明,函数表达式的类型都为 function 。
例:
1 | // 函数申明 |
其他
undefiend
变量已申明未赋值时的默认值都为 undefined,默认的函数返回值也是 undefined。
例:
1 | let foo; |
null
空类型,只有单一的一个值,即 null 本身,由于历史问题,null 在 javascript 中被认为是复杂数据类型(引用类型)。当使用 typeof null,它返回的是 object。
es6
Symbol类型
es6 中新增的数据类型,其是作为全局函数而非构造函数 Symbol(),表示独一无二的唯一值,常被用来定义对象的属性名。
1 | let obj = { |
类型判断
typeof
typeof 运算符可以判断简单类型的数据类型,但对于复杂数据类型则无法准确判断。
1 | typeof 1 // number |
如上方代码所示,typeof 运算符只能用于判断 Number , String , Boolean , undefined Function , 和 Symbol 类型。其他类型都统一返回 object。
instanceof
instanceof 运算符用于判断对象是否为某个构造函数的实例。返回值为 Boolean 类型。她只可用来判断对象类型数据。
1 | let arr = [1] |
当用在简单类型数据上是,其始终返回 false。null 和 undefined 也总是返回 false。
1 | let num = 12, |
Function.prototype.name
利用 Function 的实例属性 name 可以获取函数名称,所以可以通过查看目标数据类型的构造函数 constructor 的 name 属性来判断数据类型。
1 | let num = 1, |
undefined、null和Symbol除外,因为他们没有构造函数。
Object.prototype.toString.call()
借助 Object 的实例方法 toString 也可以判断数据的类型,该方法会返回类似于 [object xxx] 的字符串格式,xxx 表示该数据类型的构造函数名。但对于 undefined 、null 和 Symbol,不可把 xxx 理解为构造函数,因为他们真的没有。
1 | let num = 1, |
如上方代码,各种类型都可以很好的区分,为了使用方便,我们可以将其封装为一个简单的函数调用。
1 | function getType(_val){ |
综上
前3中方式都有不同的缺陷,使用存在问题,而第4种方式对于所有的数据类型都可以很好的区分,所以可以直接应用在实际项目中。