由于JS是一种弱类型语言,在声明变量时没必要声明变量类型;变量的类型由运行中存储的数据类型决定,所以变量的类型是随机变化的,为此为保证代码运行的严谨性和代码运行时因隐式转换而致使变量类型的变化所致出现异常状况,咱们常常须要对变量类型进行验证处理。所以咱们在写代码时要对本身定义的变量类型进行有效的管理,这样能避免不少意外bug和提升debug的效率。javascript
JS总共有7种数据类型,以下所示:java
1)Stringes6
2) Number函数
3) Boolean测试
4) Null spa
5) Undefineprototype
6) Symbol (es6)debug
1) Object指针
typeof操做符能辨别基本的数据类型,而且返回值为表示该数据类型的字符串 ; 可是其能力有限,只能用于来区别原始数据类型,对于其Object类型中的Array、Date 、RegExp 及其 Null 类型没法细分出code
注意:typeof(null) = ' object '
null类型判断方法:
variable === null // true 为 null
variable == null // true 为 null 或者 undefined
用法:object instanceof constructor
instanceof 运算符用来检测一个构造函数的prototype属性是否存在一个对象的原型链上,即检测该对象是不是一个构造函数的实例化
(1)能够经过Object.getPrototypeof(object)方法来查看该对象的原型,即该对象内部属性[[Prototype]]的值
若是 Object.getPrototypeof(object) === constructor.prototype
则该所检测对象必定是所测试的构造函数的实例化
var arr = [] , reg = /\bis\b/g , str1 = new String(), str2 = 'aaa'; arr instanceof Array // true arr instanceof Object // true arr instanceof RegExp // false reg instanceof RegExp // true str1 instanceof String // true str2 instanceof String // false
所以咱们能够经过 instanceof 运算符对object类型的数据进一步判断来区分 Array、Date 、RegExp 及其 Null 类型
实例化的对象都有constructor属性,其constructor属性指针指向的是构造函数,可用来判断未知对象的类型
因此上面的判断方法也能够写成下面的判断方式
arr.constructor === Array // true arr.constructor === Object // true arr.constructor === RegExp // false reg.constructor === RegExp // true str.constructor === String // true
4、Object.prototype.toString.call()
a = 'hello' b = [] c = function(){} Object.toString.call(a) === "[object String]" Object.toString.call(b) === "[object Array]" Object.toString.call(c) === "[object Function]"