在JavaScript中,我們常常用到typeof 來判斷一個元素的類型,但是在實際開發中我們會發現一個很難受的問題。
Null,Array (孤立他倆)
在 typeof Null 和 typeof Array中 居然返回的是 Object類型,。。。。。。。
納尼!!!上去就給他倆一個反抽!!難道是哪里寫錯了么????
原來是因為,javascript在當初設計的時候出現的BUG (突然感覺自己很牛掰)。
在 ES6制定 中曾有關於修復此 bug 的提議,提議中稱應該讓 typeof Null === 'null', 但是最后因為考慮到歷史積累代碼牽扯范圍太廣,責任重大取消這一個更改,也就是說這不在是一個
BUG了,而是龜ding。而對於Array,typeof本着萬物皆對象的原則,返回的結果就是 Object了 (原因其實很復雜,設計到Javascript的底層二進制解析,感興趣可以在網上查下,資料很多)
那么問題來了,在我們實際開發中,需要准確的區別 Number,Array,Object,String,Null,undefined甚至是funtion的時候怎么辦??????????
廢話說了這么多,進入正題 (代碼奉上)
// function typeOf (obj) { return toString.call(obj).slice(8, -1) }; // let fun = function () { console.log (123); } // let objs = typeOf ({key: '123', val: '345'}); let num = typeOf (123); let str = typeOf ('我是個字符串'); let arr = typeOf ( ['11', '22', '33']); let nulls = typeOf (null); let un = typeOf (undefined); let funs = typeOf (fun); console.log (objs, num, str, arr, nulls, un, funs);
結果:
本人:小白一枚,第一次寫博客,有什么寫錯的地方,請各位大神指點出來,必定虛心學習