JavaScript动态属性名传参报错,如何将fns[test]转为months?
解决动态属性名传入方法的语法错误问题
错误原因
你遇到的语法错误是因为旧版JavaScript不支持直接在对象字面量中使用表达式作为属性名。虽然ES6引入了计算属性名语法,但如果你的代码环境(或ESLint/TypeScript配置)未启用ES6支持,就会触发这类报错。
解决方案
方案1:使用ES6计算属性名(推荐)
直接用方括号包裹表达式作为属性名,这是ES6标准语法,现代环境默认支持:
// 正确写法:用方括号包裹计算表达式 durationFns.toString({ [fns[test]]: value })
这里的[fns[test]]会先计算出"months",再作为对象的属性名,和你直接写{ months: value }效果完全一致。
方案2:先构建对象再传入(兼容旧环境)
如果你的环境不支持ES6,可以先创建空对象,动态添加属性后再传入方法:
const params = {}; // 动态添加属性 params[fns[test]] = value; // 传入方法 durationFns.toString(params);
配置注意事项
- 若ESLint报错:检查
.eslintrc.js,确保parserOptions.ecmaVersion设为6或更高; - 若TypeScript报错:检查
tsconfig.json,确保target字段设为ES6或更高版本。
内容的提问来源于stack exchange,提问作者thqdqe
相关产品推荐
相关产品推荐

