在 JavaScript 中调试 TypeError: X is not a function 错误
这 TypeError: X is not a function
错误是 JavaScript 初学者混淆的常见原因。 当您尝试调用不是函数的值时,JavaScript 会抛出此错误。 例如:
const x = 42;
x(); // Throws 'TypeError: x is not a function'
大多数现代 JavaScript 运行时都擅长格式化此错误,因此您知道 。 您尝试调用的不是函数的表达式 例如,另一个常见原因:此错误是在对象上调用不存在的方法。
const moment = require('moment');
const date = moment('2020-06-01');
// Typo! Throws 'TypeError: date.formt is not a function'
date.formt('YYYY-MM-DD');
如果 JavaScript 在您编写的代码中抛出此错误,您应该仔细检查错误堆栈跟踪中行号处的代码。 奇怪的是,您要么拼写错误,要么需要添加检查以确保您调用的值是一个函数。
// Ensure that `x` is a function to avoid TypeError.
if (typeof x !== 'function') {
return;
}
x();
关于分号的注释
如果您不使用分号,您可能会遇到一些令人惊讶的此错误实例。 例如,下面的代码抛出 TypeError: arr[0] is not a function
:
const arr = []
const val = arr[0]
(function() { console.log(val) })()
因为结尾没有分号 arr[0]
,JavaScript 将上述代码视为等同于:
const arr = []
const val = arr[0](function() { console.log(val) })()
如果你写的 JavaScript 没有分号,一定要使用 linter 来避免这样的错误。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论