javascript中關於類型的判斷有不少種方法, 這裏介紹兩種經常使用的。javascript
typeof操做符返回一個字符串,表示未經計算的操做數的類型。java
console.log(typeof 12); // number console.log(typeof 'hello'); // string console.log(typeof true); // boolean
在MDN中, typeof的用法記錄的很詳細。性能
這裏有個js的關鍵點, 即typeof null == object。 null 不是一個對象,儘管 typeof null 輸出的是 object,這是一個歷史遺留問題,JS 的最第一版本中使用的是 32 位系統,爲了性能考慮使用低位存儲變量的類型信息,000 開頭表明是對象, null 表示爲全零,因此將它錯誤的判斷爲 object 。spa
正由於typeof不能準確判斷一個對象變量, 因此須要下面一種方法prototype
使用Object.prototype上的原生toString()方法判斷數據類型code
console.log( Object.prototype.toString.call( 'hello' )) // [object String] console.log( Object.prototype.toString.call( 1 )) // [object Number] console.log( Object.prototype.toString.call( [1, 2, 3] )) // [object Array] console.log( Object.prototype.toString.call( null )) // [object Null]
能夠將這樣的一長串代碼封裝成檢測類型的方法對象
let isType = type => obj => { return Object.prototype.toString.call( obj ) === `[object ${type}]` } isType('String')('123'); // true isType('Array')([1, 2, 3]); // true isType('Number')(1); // true