经典面试题:用typeof来判断对象的潜在陷阱
年關將至,相信大家都已經在回家的路上,在中國人眼里,過了農歷的春節,新的一年才算真正的開始。
2018年,如果你打算跳槽換一份工作,那么這個春節是你繼續充電的好機會。近期前端君會總結一些web前端面試的經典問題,分享給大家,說不定哪天面試你就會用上了。
今天我們來講一個比較簡單但是會比較常遇到的問題。
問:使用?typeof bar === "object"?來確定?bar?是否是對象的潛在陷阱是什么?如何避免這個陷阱?
盡管?typeof bar === "object"?是檢查?bar?是否對象的可靠方法,令人驚訝的是在JavaScript中 null?也被認為是對象!
因此,令大多數開發人員驚訝的是,下面的代碼將輸出 true?控制臺:
var bar = null;console.log(typeof bar === "object"); ?
// logs true!
只要清楚這一點,同時檢查?bar?是否為?null,就可以很容易地避免問題:
console.log(?(bar !== null)
?&&
?(typeof bar === "object")
); ?
// logs false
要答全問題,還有其他兩件事情值得注意:
首先,上述解決方案將返回?false,當?bar?是一個函數的時候。在大多數情況下,這是期望行為,但當你也想對函數返回?true?的話,你可以修改上面的解決方案為:
console.log(?(bar !== null)
?&&
?((typeof bar === "object")
?||
?(typeof bar === "function"))
);
第二,上述解決方案將返回?true,當?bar?是一個數組(例如,當?var bar = [];)的時候。
在大多數情況下,這是期望行為,因為數組是真正的對象,但當你也想對數組返回?false?時,你可以修改上面的解決方案為:
?(bar !== null)
?&&
?(typeof bar === "object")
?&&
?(toString.call(bar) !== "[object Array]")
);
或者,如果你使用jQuery的話:
console.log(?(bar !== null)
?&&
?(typeof bar === "object")
?&& (! $.isArray(bar))
);
熱門文章
原創教程原創教程:
附加習題:
職場焦慮:
感到迷茫:
培訓出身:
培訓費用:
搞笑黑話:
職業自由:
職場形象:
合作推廣分割線
總結
以上是生活随笔為你收集整理的经典面试题:用typeof来判断对象的潜在陷阱的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [我的1024开源程序]200元仿豆瓣小
- 下一篇: [我的1024开源程序]600元WORD