You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在JavaScript中实现类似C语言宏的变量打印功能?

方案1:最推荐的最小改动实现(仅调用时加一层对象简写)

JavaScript本身不支持C语言那种编译期宏替换的能力,函数执行时无法直接拿到外部传入参数的原始变量名,最常用的低成本替代方案是利用ES6的对象简写语法:

// 函数定义
function logVar(wrapObj) {
  const [varName, varValue] = Object.entries(wrapObj)[0]
  console.log(`${varName} =`, varValue)
}

// 调用方式,仅比你期望的写法多一对大括号,不需要手写变量名字符串
const userSelectedAddressProvinceName = '浙江省'
logVar({userSelectedAddressProvinceName})

执行后会直接输出:userSelectedAddressProvinceName = 浙江省,完全符合你要的效果,哪怕变量名再长也不需要额外重复输入。

甚至你连自定义函数都不用写,直接用console.log({变量名}),控制台会自动格式化输出键值对,日常调试足够用。


方案2:完全贴合logVar(xxx)调用写法的兼容方案(仅适合本地开发)

如果一定要严格实现logVar(abc)的调用形式,只能通过解析调用栈的方式实现,不适合生产环境使用,性能低且对压缩后的代码、同函数多调用的场景会失效:

function logVar(varValue) {
  // 解析错误栈获取调用行
  const stackLines = new Error().stack.split('\n')
  // 根据运行环境调整索引,Node.js环境一般取stackLines[1],浏览器环境一般取stackLines[2]
  const callLine = stackLines[2] ?? stackLines[1]
  const varMatch = callLine.match(/logVar\((.+?)\)/)
  if (varMatch) {
    console.log(`${varMatch[1].trim()} =`, varValue)
  } else {
    console.log(varValue)
  }
}

// 调用完全符合预期写法
const abc = 123
logVar(abc) // 输出 abc = 123

该方案仅适合本地未压缩代码的调试场景,生产环境不要使用。


内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:45:03