LWC中Eval()函数在Salesforce环境失效,LWC Playground可正常运行
LWC组件使用
eval函数报错问题 我在LWC Playground中运行以下代码完全正常,但将相同代码部署到Salesforce的LWC组件中执行时,抛出了错误。
JS代码
import { LightningElement } from 'lwc'; export default class InputText extends LightningElement { handleCommit(event) { var value = event.target.value console.log("Value: " + value); let validationRule = 'A.length > 5'; console.log("Validation Rule: " + validationRule); let n = validationRule.replace('A', 'value'); console.log("N: " + n); let x = eval(n); console.log("X: " + x); } }
HTML代码
<lightning-input type="text" label="Enter some text" oncommit={handleCommit}></lightning-input>
错误截图

问题根源
Salesforce的LWC运行在Locker Service安全沙箱中,该机制会严格禁用eval这类存在代码注入风险的动态执行函数。而LWC Playground并未启用完整的Locker Service校验,因此代码在Playground中可以正常运行,但在正式环境中会被拦截。
替代方案
放弃使用eval,改用安全的方式实现校验逻辑。针对你的场景,可以通过解析规则字符串来构建校验逻辑:
修改后的handleCommit方法:
handleCommit(event) { const value = event.target.value; console.log("Value: " + value); const validationRule = 'A.length > 5'; console.log("Validation Rule: " + validationRule); // 拆分规则为变量、操作符、阈值 const [targetExpr, operator, threshold] = validationRule.split(' '); // 替换变量占位符并解析属性 const resolvedValue = targetExpr.replace('A', 'value').split('.').reduce((ctx, key) => ctx?.[key], { value }); // 根据操作符执行校验 let isValid; switch(operator) { case '>': isValid = resolvedValue > Number(threshold); break; case '<': isValid = resolvedValue < Number(threshold); break; case '===': isValid = resolvedValue === threshold; break; // 可按需扩展更多操作符 default: isValid = false; } console.log("Validation Result: " + isValid); }
如果需要支持更复杂的校验规则,可以引入符合Locker Service要求的表达式解析库,或者提前将规则预定义为安全的JavaScript函数。
重要提示
- Locker Service是Salesforce保障组件隔离和数据安全的核心机制,会限制
eval、new Function()等动态代码执行手段。 - 开发LWC时,务必以正式Salesforce环境的运行结果为准,不要依赖Playground的宽松校验。
内容的提问来源于stack exchange,提问作者Gokul Dudani
相关产品推荐
相关产品推荐

