2016-05-17 51 views
0

此代碼不會通過測試爲什麼我的typeof檢查未定義我的摩卡測試失敗?

功能:

function setTheme(theme) { 
    chartTheme = theme; 
} 

function getTheme() { 
    if (typeof chartTheme === undefined) { 
     chartTheme = 'dark'; 
    } 
    return chartTheme; 
} 

測試:

​​

enter image description here

但是這並經過測試,如果我檢查爲"undefined"作爲一個字符串。

function getTheme() { 
    if (typeof chartTheme === 'undefined') { 
     chartTheme = 'dark'; 
    } 
    return chartTheme; 
} 

回答

2

首先看到的Which equals operator (== vs ===) should be used in JavaScript comparisons?

您使用全等運算符與undefined。嚴格的平等檢查類型和價值是平等的。

typeof返回字符串

因此,

typeof chartTheme === 'undefined' 

返回true


換句話說,

undefined !== 'undefined' 

但是,

undefined == 'undefined'. 
+0

謝謝,我想我不明白,還是那個'本身undefined'是一種!猜猜我的代碼將傳遞給函數的'undefined'轉換爲字符串。哦,我也只是用這些基本的默認檢查更簡單地更新我的代碼:'theme = theme || 'dark';' –

+0

@LeonGaban因爲變量的值並未實際定義。所以,應該有一些可以說明這一點的價值。另外,你可以使用ES6的默認參數作爲函數setTheme(theme ='dark'){'而不是'|| 「dark''。 – Tushar

+0

感謝那個ES6提示!我試過了,但在終端PhantomJS 2.1.1(Mac OS X 0.0.0)中出現這個錯誤。ERROR SyntaxError:Expected token')''我想我需要某種巴別解釋器? –