undefined 和 'undefined'
你又提出了一個非常非常重要的觀念,這是一個初學者經常會掉入的陷阱!
為什麼不行?核心區別
undefined (沒有引號):這是一個 JavaScript 的 原始資料型別 (Primitive Type) 。它代表一個變數「已被宣告,但尚未被賦值」。 chrome.alarms.get() 在找不到鬧鐘時,回傳的就是這個 型別 的值。
'undefined' (有引號):這是一個 字串 (String) 。它的內容恰好是 "u", "n", "d", "e", "f", "i", "n", "e", "d" 這幾個字元組成的。 它和 'hello' 或 '123' 在本質上是一樣的,就是一個普通的字串。
你的寫法會發生什麼事?
result 的值是 undefined (型別)。 你的判斷是 undefined !== 'undefined' (字串)。 一個 undefined 型別的值 永遠不等於 一個 string 型別的值。所以 undefined !== 'undefined' 的結果是 true 。if 條件 通過了 !你的程式碼會錯誤地進入 if 區塊,然後嘗試執行 result.name,同樣會導致 "Cannot read properties of undefined" 錯誤 。
result 的值是一個物件,例如 { name: 'myAlarm', ... }。 你的判斷是 {...} !== 'undefined' (字串)。 一個物件 永遠不等於 一個字串。所以 {...} !== 'undefined' 的結果也是 true 。if 條件也 通過了 。
留言
張貼留言