JavaScript部件编号匹配逻辑中供应商值输出异常问题求助
问题:修改代码后partSupplier值为空,console.log输出异常
初始可正常运行的代码
var siteList = {}; var siteInfo = []; var part_str = '[{"part":"00000PD","partSupplier":"DELL"}]'; var part = part_str.substring(1,part_str.length-1); eval('var partobj='+part ); console.log(partobj.part); console.log(partobj.partSupplier);
需求说明
判断部件编号是否匹配指定值:
- 匹配则保留原供应商信息
- 不匹配则将供应商设为“HP”
- 最终将信息存入JSON结构
原正常逻辑代码
if (partobj.part.includes("00000PD")){ var partSupp= partobj.partSupplier; } else { partSupp= "HP"; } siteInfo = { "Parts_Num": part, "partSupplier": partSupp } siteList.siteInfo.push(siteInfo);
出问题的修改代码
修改后代码运行后,partSupplier值为空,console.log未返回正确结果:
if (partobj.part.includes("00000PD")){ var partSupp = [partobj.partSupplier]; console.log('partSupp' || partSupp); } else { partSupp = "HP"; }
控制台输出结果
partSupp It does not return any value.
问题原因及修复方案
问题1:console.log逻辑错误
console.log('partSupp' || partSupp)中,字符串'partSupp'是真值,逻辑或||会直接返回第一个真值,因此只会打印字符串partSupp,不会输出变量的实际值。
问题2:变量类型不一致
匹配分支里把partSupp设为数组[partobj.partSupplier],不匹配分支却是字符串"HP",类型不一致会导致后续存入JSON时出现异常,也是partSupplier值为空的原因之一。
修复后的代码
if (partobj.part.includes("00000PD")){ var partSupp = partobj.partSupplier; // 保持字符串类型,和不匹配分支统一 console.log('partSupp:', partSupp); // 正确打印变量值 } else { partSupp = "HP"; } // 存入JSON的逻辑,注意先初始化siteList.siteInfo为数组,避免push报错 siteInfo = { "Parts_Num": part, "partSupplier": partSupp } siteList.siteInfo = siteList.siteInfo || []; siteList.siteInfo.push(siteInfo);
额外优化:替换eval提升安全性
eval存在安全风险,建议用JSON.parse解析字符串:
// 替换原eval部分的代码 var part_arr = JSON.parse(part_str); var partobj = part_arr[0]; // 原字符串是数组格式,取第一个元素
内容的提问来源于stack exchange,提问作者Curo
相关产品推荐
相关产品推荐

