为什么我的 typeof 检查 undefined 没有通过我的 Mocha 测试?
Why is my typeof check undefined failing my Mocha test?
此代码未通过测试
函数:
function setTheme(theme) {
chartTheme = theme;
}
function getTheme() {
if (typeof chartTheme === undefined) {
chartTheme = 'dark';
}
return chartTheme;
}
测试:
it('If theme is undefined, expect dark', function() {
ChartFactory.setTheme(undefined);
expect(ChartFactory.getTheme()).to.equal('dark');
});
然而,如果我检查 "undefined"
作为字符串,这确实通过了测试。
function getTheme() {
if (typeof chartTheme === 'undefined') {
chartTheme = 'dark';
}
return chartTheme;
}
首先看Which equals operator (== vs ===) should be used in JavaScript comparisons?
您正在对 undefined
使用严格相等运算符。严格相等检查类型和值是否相等。
typeof
returns 字符串.
因此,
typeof chartTheme === 'undefined'
returns true
.
换句话说,
undefined !== 'undefined'
但是,
undefined == 'undefined'.
此代码未通过测试
函数:
function setTheme(theme) {
chartTheme = theme;
}
function getTheme() {
if (typeof chartTheme === undefined) {
chartTheme = 'dark';
}
return chartTheme;
}
测试:
it('If theme is undefined, expect dark', function() {
ChartFactory.setTheme(undefined);
expect(ChartFactory.getTheme()).to.equal('dark');
});
然而,如果我检查 "undefined"
作为字符串,这确实通过了测试。
function getTheme() {
if (typeof chartTheme === 'undefined') {
chartTheme = 'dark';
}
return chartTheme;
}
首先看Which equals operator (== vs ===) should be used in JavaScript comparisons?
您正在对 undefined
使用严格相等运算符。严格相等检查类型和值是否相等。
typeof
returns 字符串.
因此,
typeof chartTheme === 'undefined'
returns true
.
换句话说,
undefined !== 'undefined'
但是,
undefined == 'undefined'.