Reputation: 31
As I'm debugging, I'm consistently writing this bit of code:
a = 2;
// do some operation on variable a
console.log("The a variable is now " + a);
I wondered if I might create a function that shortens that process, like this,
function varlog(x) {
var vartext = // this is what I don't know
return "The " + vartext + " variable is now " + x;
}
var a = 2;
console.log(varlog(a));
Two questions,
Upvotes: 0
Views: 101
Reputation: 76
You can use "Reflect" as below
function easyDebug(variable){
let name = Reflect.ownKeys(variable)[0];
let vals = JSON.stringify(variable[name]);
console.log("The ( "+ name +" ) variable is now = ( " + vals +" )");
}
let a=5;
easyDebug({a});
//Will output
//The ( a ) variable is now = ( 5 )
let arr=[5,6,7];
easyDebug({arr});
//Will output
//The ( arr ) variable is now = ( [5,6,7] )
let obj={"key1":"val1","key2":"val2"};
easyDebug({obj});
//Will output
//The ( obj ) variable is now = ( {"key1":"val1","key2":"val2"} )
let obj2={obj};
easyDebug({obj2});
//Will output
//The ( obj2 ) variable is now = ( {"obj":{"key1":"val1","key2":"val2"}} )
let arrObj = [obj];
easyDebug({arrObj});
//Will output
//The ( arrObj ) variable is now = ( [{"key1":"val1","key2":"val2"}] )
Upvotes: 3
Reputation: 386620
By handing over a variable, the name is not known. the only part, where a variable is known, is to use short hand properties, where the variable name is now the property.
function varlog(x) {
const [k, v] = Object.entries(x)[0];
return `The ${k} variable is now ${v}`;
}
const a = 2;
console.log(varlog({ a })); // call with short hand property
Upvotes: 2