ItIron2021
Javascript
昨天我們簡單討論了惱人的強制轉型問題,今天讓我們來面對最後一個型別相關的題目吧!
別擔心,今天也是很簡單的題目!
請說明你要如何檢查一個變數的型別
老樣子,這種時候就需要防雷圖啦!
也許你看到這題目會覺得...這什麼爛東西? 不就用typeof就好了嗎?
說得沒錯! typeof確實是個好幫手!
const name = 'Danny'
const age = 30
console.log(typeof name) // string
console.log(typeof age) // number
那麼...如果是這樣的玩意呢?
console.log(typeof []) // ???
console.log(typeof {}) // ???
我想你應該猜到今天究竟要探討什麼了,上述程式碼的輸出結果毫不意外的是object。那我們先簡化一下問題吧!
你要如何判斷一個變數不是陣列?
首先,在js中除了基本型別以外,實際上全都是物件,所以typeof就出局啦! 不過還是有一些方法可以協助你判斷的,我們一個一個來看吧!
是的,若原生的javascript就有方法替你判別,那你又何苦自己刻一個函數呢! 不要重複造輪子是個蠻不錯的準則,Array的原型下有個isArray的方法可以協助你辨別陣列。
console.log(Array.isArray(10)) // false
console.log(Array.isArray('Danny')) // false
console.log(Array.isArray([])) // true
console.log(Array.isArray({})) // false
console.log(Array.isArray(null)) // false
console.log(Array.isArray(undefined)) // false
我們在昨天的文章講過,在許多資料型別的原型下都掛著toString方法,但都有所不同,其中Object.toString會提供我們更完整的資訊,所以囉! 最終的萬用殺招就是把掛在Object底下的方法拿來使用! 同樣以上方的題目作為例子(若你對於call還不夠熟練也沒關係,這系列文章在之後還是會提到的)
console.log(Object.prototype.toString.call([])) // [object Array]
console.log(Object.prototype.toString.call({})) // [object Object]
console.log(Object.prototype.toString.call(null)) // [object Null]
console.log(Object.prototype.toString.call(undefined)) // [object Undefined]
這麼一來就可以清楚地辨別所有的型別囉!
資料型別
本文章同步發布於個人部落格,有興趣的朋友也可以來逛逛~!