CodeQL 文档

无用类型测试

ID: js/useless-type-test
Kind: problem
Security severity: 
Severity: error
Precision: very-high
Tags:
   - maintainability
   - correctness
   - language-features
   - external/cwe/cwe-570
   - external/cwe/cwe-571
Query suites:
   - javascript-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

在 ECMAScript 5 中,typeof 运算符返回以下六个类型标签之一:"undefined""boolean""number""string""object""function"。在 ECMAScript 2015 中,它还可以返回 "symbol",而在较旧版本的 Internet Explorer 中,它在某些情况下可能会返回 "unknown""date"。因此,与任何其他字符串字面量进行比较都是无用的。

建议

仔细检查所讨论的比较。如果类型标签只是拼写错误,请更正它。在某些情况下,typeof 返回的类型标签不够精确,因此您可能需要使用其他类型测试函数。

示例

以下代码片段试图确定 a 是否为数组

if (typeof a === 'array')
	console.log("It's an array!");

请注意,typeof 不够精确,无法区分数组与其他对象,因为它对两者都返回类型标签 "object"。与 ECMAScript 5 兼容的平台提供了一个库函数 Array.isArray,可以用来代替它

if (Array.isArray(a))
	console.log("It's an array!");

在较旧的平台上,您可以使用 Mozilla Developer Network 上解释的技术。

参考文献

  • ©GitHub, Inc.
  • 条款
  • 隐私