JavaScript如何获取函数调用时传入的原始变量名
获取函数调用时的原始变量名
在JavaScript里,函数调用时传递的是变量的值,而不是变量的标识符本身,所以没办法直接通过形参SOURCE拿到外部的MyVariable这种原始变量名——你之前用Object.keys({SOURCE})[0]只能拿到形参的名字"SOURCE",就是因为这个原因。
不过有个简单可靠的办法能实现你想要的效果:用对象字面量传递参数,利用ES6的对象属性简写语法,把变量名变成对象的键。
具体实现代码
function CheckFunction(obj) { // 获取对象的唯一键(也就是原始变量名) const varName = Object.keys(obj)[0]; const value = obj[varName]; // 检查是否为数字 const isNumber = typeof value === 'number' && !isNaN(value); console.log(`${varName} ${isNumber ? 'is a number.' : 'is not a number.'}`); } // 调用示例 const Area = 100; const Name = "Alice"; CheckFunction({ Area }); // 输出 "Area is a number." CheckFunction({ Name }); // 输出 "Name is not a number."
原理说明
当你写CheckFunction({ Area })时,这是ES6的简写语法,等价于CheckFunction({ Area: Area })——对象的键就是你传入的原始变量名Area,值是变量的实际内容。函数内部通过Object.keys(obj)[0]就能拿到这个键名,同时获取对应的值做检查,完美实现你要的输出效果。
不推荐的方法(仅供了解)
有些方案会尝试解析函数的调用栈(比如用new Error().stack)或者解析函数的源代码字符串,但这种方法兼容性差,而且很容易因为代码压缩、环境变化失效,绝对不建议在生产环境使用。上面的对象传参法是最稳妥的。
内容的提问来源于stack exchange,提问作者Rope3
相关产品推荐
相关产品推荐

