2016-05-17 9 views
0

このコードは、テスト私のタイプチェックは未定義のため、私のモカのテストに失敗しましたか?

関数を渡しません:

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

まず第一にあなたがundefinedと厳密な等価演算子を使用しているWhich equals operator (== vs ===) should be used in JavaScript comparisons?

を参照してください。厳密な等価性は、型と値が等しいことを確認します。

typeof文字列を返します。

したがって、

typeof chartTheme === 'undefined' 
true

戻ります。言い換えれば


undefined !== 'undefined' 

しかし、

undefined == 'undefined'. 
+0

おかげで、私は私がまだ理解していないことは 'それだけでundefined'がタイプであるということですね!私のコードが関数に渡された 'undefined'を文字列に変換したと思います。ああ、私はちょうどこれらの基本的なデフォルトチェックでもっと簡単に自分のコードを更新しました: 'theme = theme || 'dark'; ' –

+0

@LeonGaban変数の値は実際には定義されていないためです。だから、これを伝える価値があるはずです。また、ES6のデフォルトのパラメータを 'function setTheme(theme = 'dark'){'の代わりに '|| '暗い'。 – Tushar

+0

そのES6のチップに感謝!私はそれを試しましたが、ターミナル 'PhantomJS 2.1.1(Mac OS X 0.0.0)でエラーが発生しました。エラー SyntaxError:Expected token ')''私はある種のBabelインタプリタが必要でしょうか?おそらく@LeonGabanでしょう。 –

関連する問題