📅  最后修改于: 2023-12-03 15:18:05.229000             🧑  作者: Mango
在 JavaScript 中,我们通常使用 includes
方法来检查一个数组或字符串是否包含某个特定的值。然而,当我们使用 obj[key].includes
时,却会遇到一个异常,提示这不是一个函数。
当我们使用以下代码时:
const obj = {
name: 'John Doe'
}
console.log(obj.name.includes('Doe'))
我们期望输出为 true
,表示 obj.name
中包含 'Doe'
字符串。但实际上,这段代码会抛出一个异常,提示 obj.name.includes
不是一个函数。
这是因为 obj.name
实际上是一个字符串,而非一个数组。只有数组和字符串才具有 includes
方法,对于其他类型的数据,比如数字、布尔值、对象等,是没有该方法的。
要解决这个问题,我们需要在访问 obj.name
属性之前,先将它转换成一个字符串。可以使用 String()
函数,将其转换成字符串。代码如下:
const obj = {
name: 'John Doe'
}
console.log(String(obj.name).includes('Doe'))
运行上述代码,会正常输出 true
。
另外,如果 obj.name
可能是 undefined
或 null
,则需要使用 ?.
空值合并运算符,防止抛出异常。代码如下:
const obj = {
name: null
}
console.log(String(obj.name)?.includes('Doe'))
当我们使用 obj[key].includes
时,我们需要先确保 obj[key]
是一个字符串或数组,否则会抛出一个异常。如果 obj[key]
可能为 undefined
或 null
,则需要使用 ?.
空值合并运算符。