TypeError: indexOf 不是 JavaScript 中的函数
TypeError: indexOf is not a function in JavaScript
indexOf()
当对非字符串或数组类型的值调用该方法时,会发生“indexOf 不是函数”错误。
要解决此错误,请在调用该方法之前将值转换为字符串或数组,或者确保仅对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()
方法之前访问该属性。