JavaScript 中 TypeError: slice is not a function 错误

当对非字符串或数组类型的值调用 slice() 方法时,会发生“slice is not a function”错误。 要解决此错误,请在调用方法之前将值转换为字符串或数组,或者确保仅对字符串或数组调用 slice() 方法。

下面是产生上述错误的示例代码

const str = 9876;

// ⛔️ TypError: slice is not a function
const result = str.slice(2);

我们在导致错误的数字上调用了 slice 方法。 slice 方法由 JavaScript 中的 2 种数据类型实现 – String.slice 和 Array.slice。

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

// ?️ For Strings
const num = 9876;
const result1 = num.toString().slice(2);
console.log(result1); // ?️ "76"

// ?️ For Arrays
const set = new Set(['a', 'b', 'c']);
const result2 = Array.from(set).slice(2);
console.log(result2); // ?️ ['c']

在调用 slice 方法之前,我们使用 toString() 方法将数字转换为字符串。

在第二个示例中,我们在调用 slice 方法之前使用 Array.from 方法将 Set 转换为数组。

或者,我们可以在调用 slice 方法之前有条件地检查值的类型是否正确。

const num = 9876;
const result1 = typeof num === 'string' ? num.slice(2) : '';
console.log(result1); // ?️ ""

// ?️ For Arrays
const set = new Set(['a', 'b', 'c']);
const result2 = Array.isArray(set) ? set.slice(2) : [];
console.log(result2); // ?️ []

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

在第一个示例中,我们检查值是否为字符串类型。如果是,我们返回调用切片的结果,否则我们返回一个空字符串。

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

如果值是一个数组,我们返回调用 slice 方法的结果,否则我们返回一个空数组。

如果我们有一个对象,很有可能必须访问该对象的特定属性,该属性的值类型为字符串或数组。


总结

当对非字符串或数组类型的值调用 slice() 方法时,会发生“slice is not a function”错误。要解决此错误,请在调用方法之前将值转换为字符串或数组,或者确保仅对字符串或数组调用 slice() 方法。