为什么我的 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'.