在开发过程中,周期性地JavaScript
发生错误:Uncaught TypeError: *** is not a function
例如在这段代码中:
const result = this.response;
result.forEach((e) => console.log(e));
未捕获的类型错误:result.forEach 不是函数
或者在这个:
const errors = response.errors.map(item => item.toString());
未捕获的类型错误:response.errors.map 不是一个函数
如何理解这个错误是什么、它意味着什么、为什么会出现以及如何修复它?
我们将考虑这个对象的例子
未捕获的类型错误:*** 不是函数
当我们试图调用一个对象的方法(函数),但它不是一个时,就会出现这个错误。
在第一种情况下它
getName()
不在对象中,在第二种情况下错误不是一个函数。类型不匹配
也许我们期待一个数组来找我们,我们正在尝试执行:
我们会得到一个错误,因为字符串没有方法
forEach
如何避免此类错误?
检查对象中有什么,对象中是否存在我们需要的数据。验证选项之一,使用
console.log()
.您可以从最后一个密钥开始,但最好打印整个密钥以了解我们正在使用的结构:
在调用该函数之前,建议检查键的类型。如果我们的键是一个函数,则调用。
签入时,
if
最好指定完整的密钥链进行验证,因为例如以下构造将抛出异常,因为data.values
不存在:您可以使用可选的链接运算符“ ?”来缩短代码。':
可选的链运算符将检查左侧的值。如果值为
null
orundefined
,则链终止并返回undefined。有时,即使我们确信数据的正确性,此类错误也可能是由平庸的拼写错误引起的。检查你自己和你的代码!