JS中几种不同判断数据类型的方法
数据类型种类
- 原始数据类型:
Null
Undefined
String
Number
Boolean
- 引用数据类型:
Object
在JavaScript中,应用数据类型都时继承自Object
,比如JS本身提供的Array, RegExp, Date等等。另外还有JS使用者自己构造的类。
typeof
typeof表达式返回字符串,其值有7中类型:'string'
'number'
'boolean'
'undefined'
'object'
'function'
'symbol'
。
- 对于原属数据类型:
Number
,Undefined
,Number
,Boolean
能够返回正确的值,因此判断这些类型时使用typeof表达式式比较方便的。例:typeof('aaaa') === 'string' 返回值为true - 对于原始数据类型:
Null
返回的值是'object'
,显然是无法判断Null数据类型的 - 对于引用数据类型:返回的值都是
'object'
,所以无法判断Array
Date
等数据类型
instanceof
A instanceof B从字面理解就是,A是B的实例,所以它判断的就是对象类型。比如[1] instanceof Array
返回值为true。
[1] instanceof Object
返回值也是true,这是因为,[1]
虽然是有Array
构造,但是也是Object
的实例。 Object.prototype.toString.call
返回字符串以下格式:[object Object]
,其中后面的Object对应为实例的构造函数,例如:
- Object.prototype.toString.call([]) 返回 '[object Array]'
- Object.prototype.toString.call([]) 返回 '[object Date]' 但是这个方法之对于JS本身的数据类型有效,对于自定义的类型无用,因为返回值都是'[object Object]'比如:
function Car(color) { this.color = color;};function MiniCar(color) { Car.call(this, color)}MiniCar.prototype = Car.prototype;MiniCar.prototype.constructor = MiniCar;var miniCar1 = new MiniCar('red');Object.prototype.toString.call(miniCar1); // '[object Object]'
访问实例constructor属性
通过直接访问实例的contructor属性,可以的到该数据的来自于那个构造函数,从而得到准确数据类型。