由於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]"