Disallow comparing undefined
using typeof
​
💼 This rule is enabled in the ✅ recommended
config.
🔧💡 This rule is automatically fixable by the --fix
CLI option and manually fixable by editor suggestions.
Checking if a value is undefined
by using typeof value === 'undefined'
is needlessly verbose. It's generally better to compare against undefined
directly. The only time typeof
is needed is when a global variable potentially does not exists, in which case, using globalThis.value === undefined
may be better.
Historical note: Comparing against undefined
without typeof
was frowned upon until ES5. This is no longer a problem since all engines currently in use no longer allow reassigning the undefined
global.
Fail ​
function foo(bar) {
if (typeof bar === 'undefined') {}
}
import foo from './foo.js';
if (typeof foo.bar !== 'undefined') {}
Pass ​
function foo(bar) {
if (foo === undefined) {}
}
import foo from './foo.js';
if (foo.bar !== undefined) {}
Options ​
checkGlobalVariables ​
Type: boolean
Default: false
The rule ignores variables not defined in the file by default.
Set it to true
to check all variables.
// eslint unicorn/no-typeof-undefined: ["error", {"checkGlobalVariables": true}]
if (typeof undefinedVariable === 'undefined') {} // Fails
// eslint unicorn/no-typeof-undefined: ["error", {"checkGlobalVariables": true}]
if (typeof Array === 'undefined') {} // Fails