JS调用Array.some()报‘5Style is not a function’错误咨询
问题复现
运行如下JavaScript代码时,抛出5Style is not a function运行时错误:
NationalLevelCategoriesChosenList = [ ["5Style", "5MelodyHarmony", "5RhythmTempo", "5TextureStructureForm", "5Timbre"] ], [ [] ]; if (NationalLevelCategoriesChosenList[0].some("5Style")) { console.log("working") }
报错原因
- 核心触发原因:
Array.prototype.some()方法要求传入的第一个参数必须是用于逐元素判断的回调函数,代码中直接传入了字符串"5Style"。some执行时会尝试调用传入的参数,本质是执行"5Style"(当前遍历元素, 索引, 原数组),字符串不属于可调用的函数类型,因此直接抛出5Style is not a function的类型错误。 - 附加逻辑问题:数组初始化写法不符合预期。由于赋值运算符优先级高于逗号运算符,现有写法实际等价于先给
NationalLevelCategoriesChosenList赋值为[["5Style", "5MelodyHarmony", "5RhythmTempo", "5TextureStructureForm", "5Timbre"]],后续写的[[]]是独立表达式,执行后直接被丢弃,不会存入目标变量,和预期的「外层数组包含两个子数组」的二维数组结构不符。
修复方法
- 修正数组初始化结构,将两个内层数组都包裹在外层数组的方括号内,得到预期的二维数组结构,避免逗号运算符导致的赋值异常。
- 修正
some()方法的传参,传入判断回调,检测目标数组中是否存在值等于"5Style"的元素。
修复后的完整可运行代码:
const NationalLevelCategoriesChosenList = [ ["5Style", "5MelodyHarmony", "5RhythmTempo", "5TextureStructureForm", "5Timbre"], [] ]; if (NationalLevelCategoriesChosenList[0].some(item => item === "5Style")) { console.log("working") }
代码运行后会正常在控制台输出working,无报错。
内容的提问来源于stack exchange,提问作者Ankere
相关产品推荐
相关产品推荐

