📜  obj[key].includes 不是函数 - Javascript (1)

📅  最后修改于: 2023-12-03 15:18:05.229000             🧑  作者: Mango

obj[key].includes 不是函数 - JavaScript

在 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 可能是 undefinednull,则需要使用 ?. 空值合并运算符,防止抛出异常。代码如下:

const obj = {
  name: null
}

console.log(String(obj.name)?.includes('Doe'))
结论

当我们使用 obj[key].includes 时,我们需要先确保 obj[key] 是一个字符串或数组,否则会抛出一个异常。如果 obj[key] 可能为 undefinednull,则需要使用 ?. 空值合并运算符。