iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
Modern Web

每日挑戰,從Javascript面試題目了解一些你可能忽略的概念系列 第 9

每日挑戰,從Javascript面試題目了解一些你可能忽略的概念 - Day9

  • 分享至 

  • xImage
  •  
tags: ItIron2021 Javascript

前言

昨天我們簡單討論了惱人的強制轉型問題,今天讓我們來面對最後一個型別相關的題目吧!
別擔心,今天也是很簡單的題目!

本日題目與解釋

請說明你要如何檢查一個變數的型別

老樣子,這種時候就需要防雷圖啦!

thinking-day9

也許你看到這題目會覺得...這什麼爛東西? 不就用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就出局啦! 不過還是有一些方法可以協助你判斷的,我們一個一個來看吧!

  • 方法一: isArray

是的,若原生的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

我們在昨天的文章講過,在許多資料型別的原型下都掛著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]

這麼一來就可以清楚地辨別所有的型別囉!

本日核心觀念與總結

核心觀念

資料型別

總結

  • typeof雖然可以辨別部分的型別,但碰到非基本型別就無法了
  • 可以善用Object.prototype.toString.call來進一步的判斷資料型別

本文章同步發布於個人部落格,有興趣的朋友也可以來逛逛~!


上一篇
每日挑戰,從Javascript面試題目了解一些你可能忽略的概念 - Day8
下一篇
每日挑戰,從Javascript面試題目了解一些你可能忽略的概念 - Day10
系列文
每日挑戰,從Javascript面試題目了解一些你可能忽略的概念30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言