JSON位置10出现意外undefined令牌错误,数组添加问题求助
问题原因分析
- 循环逻辑完全错误:
for (let i = 1; i <= list.length; i--)是无限循环——初始i=1,每次循环i递减,永远满足i <= list.length(只要list初始长度≥0),会导致list被无限添加内容,最终处理JSON时出现异常。 - 变量未定义/拼写错误:
- 代码中使用的
list变量未声明,若未在外部定义则为undefined,直接调用list.push会导致后续生成的内容包含无效值,触发JSON解析错误。 console.log(lista);中的lista是拼写错误,应为list或listData.lista,这里会直接输出undefined。
- 代码中使用的
- 模板字符串语法错误:
"$ {listData}"里的$和{之间有空格,正确写法是${listData};而且直接将对象listData插入字符串会得到"[object Object]",这不是合法的JSON格式值,后续转JSON时会引发解析错误。 - JSON不支持undefined类型:如果
getList(cssList)返回undefined,或者propCSS是undefined,那么listData.lista = propCSS会让listData包含undefined值,当尝试将这些内容序列化为JSON时,JSON规范不允许undefined,就会抛出Unexpected token undefined的错误。
解决方法
1. 修正循环逻辑
根据需求调整循环,比如如果是要向list添加指定次数的内容,改为合理的循环条件:
// 示例:添加3次内容 for (let i = 0; i < 3; i++) { list.push(JSON.stringify(listData)); // 将对象转为合法JSON字符串 console.log(list); }
如果是要遍历listData.lista的内容,改为:
for (const item of listData.lista) { list.push(item); // 直接添加数组元素,而非整个对象 console.log(list); }
2. 声明并初始化变量
确保list变量已正确声明和初始化:
const list = []; // 初始化空数组
3. 修复模板字符串与JSON序列化
如果需要将listData转为JSON格式的字符串存入数组,使用JSON.stringify()而非直接拼接:
// 错误写法:`"$ {listData}"` // 正确写法: list.push(JSON.stringify(listData));
4. 确保关键变量有有效值
在使用getList(cssList)和resposta['propCSS']前,先检查是否为有效值:
const propCSS = resposta?.['propCSS'] || []; // 兜底为空数组 const listData = getList(cssList) || { lista: [] }; // 兜底为包含空数组的对象 listData.lista = propCSS;
修正后的完整示例代码
const list = []; // 初始化空数组 const propCSS = resposta?.['propCSS'] || []; const listData = getList(cssList) || { lista: [] }; listData.lista = propCSS; // 示例:向list添加listData的JSON字符串,循环3次 for (let i = 0; i < 3; i++) { list.push(JSON.stringify(listData)); console.log(list); }
内容的提问来源于stack exchange,提问作者Thierry Santos Pereira
相关产品推荐
相关产品推荐

