js怎么把变量名转换字符串?
前几天被同事问了一个问题,如何把 js
中的变量名 转换成字符串输出,当时是下班期间在忙其他事,便说下去看看,今天突然想起来,记录一下:
应用场景:比如要把我们经常在开发中的调试输出的 console.log
封装一下,因为我们为了在控制台容易找到我们输出的内容,经常打印会采用下面这样的方式:
let name = "tom", age = 18;
console.log('name:', name);
console.log('age:', age);
// 输出 name:tom age:18
那么问题来了,我们有没有什么办法,比如封装某个方法 someFn
,然后传入变量,然后直接输出这样 字符串变量名 + 变量值
的形式呢?
原则上是不行的,因为我们在传参或者使用变量名的时候,其实拿到的都是变量的值。我们都知道对象我们在访问的时候能通过一个key
和 value
来访问对象的属性和属性值,那我们能不能将变量通过类似对象这样的方式来访问呢,带着这个问题我们继续往下看,我们在写代码中经常会用到对象这样的写法:
let name = 'tony';
let someOne = {
name,
age: 18
}
// someOne: {name: 'tony', age: 18}
我们无法直接将变量当作形参的方式传入函数中,但是我们可以从name
属性的写法中得到启示来进行转化。例如我们写一个 Log
方法,方便调试使用:
const Log = (data = {}) => {
if(data) {
const key = Object.keys(data)[0];
const value = Object.values(data)[0];
console.log(key, value)
}
}
在调用的时候需将变量转化成对象即可:
let name = 'tony',
age = 18,
hobby = { sport: 'baseketball' , music: 'pop' };
Log({name}); // name tony
Log({age}); // age 18
Log({hobby}); // hobby {sport: 'baseketball', music: 'pop'}