其實我還真的沒想過為什麼 typeof 可以用,如果真的要解釋的話,其實也沒有什麼原因,這本來就是它的用途之一。

我知道這看起來跟大家所知道的「沒被宣告的變數不能拿來使用」有點差異,所以要想的話也可以把這個想成是特例,想成 JS 提供一個特別的方法來讓你檢查某個變數是不是可以被使用。

如果你真的想探究原因的話,可以說:「規格就是這樣訂的」,MDN 裡面有附 ECAMScript 的規格,http://ecma-international.org/ecma-262/5.1/#sec-11.4.3

裡面寫到:

If Type(val) is Reference, then

  1. If IsUnresolvableReference(val) is true, return "undefined".
  2. Let val be GetValue(val).

Reference 中文通常翻作參考或是參照,這邊可以先簡單想成就是一個變數,所以 Type(val) 是 Reference,然後又滿足 IsUnresolvableReference 這個條件,所以就回傳字串的 undefined 了。至於怎樣叫做 UnresolveReference,可以自己再看一下規格,但如果整套要弄懂的話要花不少時間,要把 spec 裡面相關得部分都看過XD

所以背後也沒有什麼神奇的魔法,就是規格這樣寫的。

Written by

重度拖延症患者,興趣是光想不做,有很多想做的事,卻一件都沒有執行。無聊的時候喜歡寫文章,發現自己好像有把事情講得比其他人清楚的能力。相信分享與交流可以讓世界更美好。Medium 文章列表請參考:https://aszx87410.github.io/blog/medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store