TypeError:indexOf 不是 JavaScript 中的函数 [已解决]

TypeError: indexOf 不是 JavaScript 中的函数

TypeError: indexOf is not a function in JavaScript

indexOf()当对非字符串或数组类型的值调用该方法时,会发生“indexOf 不是函数”错误。

要解决此错误,请在调用该方法之前将值转换为字符串或数组,或者确保仅对indexOf字符串或数组调用该方法。

typeerror indexof 不是一个函数

下面是错误如何发生的示例。

索引.js
const str = 1234; // ⛔️ Uncaught TypeError: str.indexOf is not a function const result = str.indexOf('3');

我们indexOf在导致错误的数字上调用了该方法。
indexOf()方法仅支持
字符串

数组

在使用之前将值转换为字符串或数组indexOf()

要解决此错误,请在调用方法之前将值转换为字符串或数组,或者仅在值的类型正确时才调用方法。

索引.js
// ✅ Convert to a String before using indexOf() const num = 1234; const result1 = String(num).indexOf('3'); console.log(result1); // 👉️ 2 // --------------------------------------- // ✅ Convert to an Array before using indexOf() const set = new Set(['a', 'b', 'c']); const result2 = Array.from(set).indexOf('b'); console.log(result2); // 👉️ 1

在使用该方法之前,我们使用String()构造函数将数字转换为字符串String.indexOf()

在第二个示例中,我们使用
Array.from()
方法在使用该方法之前将对象转换
Set为数组Array.indexOf()

使用前检查值是字符串还是数组indexOf()

或者,您可以在使用该方法之前有条件地检查值的类型是否正确indexOf()

索引.js
// ✅ check if the value is a String before using indexOf() const num = 1234; const result1 = typeof num === 'string' ? num.indexOf('3') : -1; console.log(result1); // 👉️ -1 // ---------------------------------------------------------- // ✅ check if the value is an Array before using indexOf() const set = new Set(['a', 'b', 'c']); const result2 = Array.isArray(set) ? set.indexOf('b') : -1; console.log(result2); // 👉️ -1

我们使用了与语句非常相似的三元运算符if/else

如果问号左边的表达式求值为真值,则返回冒号左边的值,否则返回右边的值。

您也可以使用简单的if语句来获得相同的结果。

索引.js
// ✅ check if the value is a String before using indexOf() const num = 1234; let result1 = -1; if (typeof num === 'string') { result1 = num.indexOf('3'); } console.log(result1); // 👉️ -1 // ---------------------------------------------------------- // ✅ check if the value is an Array before using indexOf() const set = new Set(['a', 'b', 'c']); let result2 = -1; if (Array.isArray(set)) { result2 = set.indexOf('b'); } console.log(result2); // 👉️ -1

在第一个示例中,我们检查值是否为字符串类型。如果是,我们返回调用该String.indexOf()方法的结果,否则,我们返回
-1

在第二个示例中,我们使用Array.isArray()方法检查值是否为数组

如果值是一个数组,我们返回调用该方法的结果Array.indexOf()
,否则,我们返回
-1

如果错误仍然存​​在,请console.log检查您调用该方法的值,并确保它是字符串类型或数组类型。 indexOf

如果您有一个对象,您很有可能必须访问具有字符串或数组值的对象的特定属性。

索引.js
const obj = { site: ['bobby', 'hadz', 'com'], }; console.log(obj.site.indexOf('bobby')); // 👉️ 0

我们有一个具有site数组值属性的对象,因此我们必须在调用Array.indexOf()方法之前访问该属性。