Result of typeof
should be compared with correct value
- BAD_TYPEOF_COMPARISON
- Error
- Medium
- No tags
This rule applies when the result of typeof
is compared with incorrect value.
Possible return values of typeof
operator are the following strings:
- "undefined"
- "object"
- "boolean"
- "number"
- "string"
- "symbol"
- "function"
Therefore, if a programmer compares with the value not listed above, it will always result in false
undesirably.
For more information, please see this documentation.
Noncompliant Code Example
View with compliant examples side by side// Example 1
// BAD_TYPEOF_COMPARISON alarm because 'array' is not the possible return value of typeof.
if (typeof x === 'array') { console.log('x is array'); }
// Example 2
// BAD_TYPEOF_COMPARISON alarm because 'udefined' is mistyping of 'undefined'.
var zkPort = typeof portValue === 'udefined' ? '2181' : portValue;
// Example 3
// BAD_TYPEOF_COMPARISON alarm because typeof result is not compared with a string value.
if (typeof x === undefined) { console.log('x is undefined'); }
// Example 4
// BAD_TYPEOF_COMPARISON alarm because typeof result is not compared with a string value.
if (typeof x) { console.log('x is not undefined'); }
Compliant Code Example
View with noncompliant examples side by side// Example 1
// Use Array.isArray().
if (Array.isArray(x)) { console.log('x is array'); }
// Use a function in third-party libraries like jQuery or underscore.
if ($.isArray(x)) { console.log('x is array'); }
// Example 2
var zkPort = typeof portValue === 'undefined' ? '2181' : portValue;
// Example 3
if (typeof x === 'undefined') { console.log('x is undefined'); }
// Example 4
if (typeof x !== 'undefined') { console.log('x is not undefined'); }
Version
This rule was introduced in DeepScan 1.0.0-alpha.