Javascript:从变量本身引用变量名
我想创建一个快速函数,它将Javascript:从变量本身引用变量名,javascript,Javascript,我想创建一个快速函数,它将console.log变量名和值。我希望函数的结果显示在控制台中:foo:bar 我对函数的基本想法如下所示: function varlog(var_name) { console.log(var_name + ": " + eval(var_name)); } 我想说的是: function someRandomFunction() { var foo = "bar"; // ... some stuff happens varlo
console.log
变量名和值。我希望函数的结果显示在控制台中:foo:bar
我对函数的基本想法如下所示:
function varlog(var_name)
{
console.log(var_name + ": " + eval(var_name));
}
我想说的是:
function someRandomFunction()
{
var foo = "bar";
// ... some stuff happens
varlog("foo");
}
如果foo
是全局的,则此选项有效,但在提供的示例中不起作用。另一个只在全局范围内起作用的选项是使用窗口[var\u name]
而不是可怕的eval
我不认为我的要求是可能的,但我想我会把它扔出去
我花了很多时间试图变得懒惰。我当前的方法就是console.log('foo:'+bar)代码>它工作得很好。但现在我只想知道这是否可行
我在搜索这个/创建我现在拥有的东西时提到的一些其他问题:
--
编辑:如果名称“foo”可以从变量派生,我想调用varlog(foo)
。它不起作用的原因是变量foo
无法访问函数varlog
foo
是在someRandomFunction中声明的,并且从未传递到varlog
,因此varlog
不知道变量foo是什么!您可以通过将变量foo
及其字符串表示形式传递到函数中(或者使用某种闭包在varlog
的范围内生成foo
)来解决此问题,但是,我认为您运气不好
希望这有帮助。我不相信你想做的是可能的
我能想到的最佳选择是将一个对象传递给varlog
,它基本上是一个键值散列:
function varlog(obj)
{
for (var varname in obj) {
console.log(varname + ": " + obj[varname]);
}
}
function someRandomFunction()
{
var foo = "bar";
// ... some stuff happens
varlog({foo: foo});
}
虽然我不知道这种可能性,但我想分享一个小想法:
Object.prototype.log = function(with_message) {
console.log(with_message + ":" + this);
}
var x = "string";
x.log("x");
就像我说的,一个小主意。我喜欢@mhitz的主意,所以我把它做得更大一些
缺点是需要使用.value
来访问变量内容
Object.prototype.log=函数(消息){
if(message)console.log(this.name、this.value、message);
else console.log(this.name,this.value);
}
函数nar(名称、值){
var o={name:name,value:value};
此[名称]=o;
返回o;
}
//var globalVar=1;
nar('globalVar',1);
globalVar.log();
//>globalVar 1
全局值+=5;
globalVar.log(‘等于六’);
//>globalVar 6等于6
var someFunction=函数(){
//var-localVar=2;
nar('localVar',2);
localVar.log('someInfo');
//>localVar 2 someInfo
};
someFunction()代码>解决方案-(针对您的实际用例)
console.log({foo})
在ES6IdentifierReference
s被接受为PropertyDefinition列表上的PropertyDefinition
s:
变量名称正被设置为对象的属性
键
变量值被设置为对象的属性
的值
当console.log
显示对象及其属性/ies'键和值时,您可以通过调用console.log({foo})
来使用它查看变量的名称和值
请注意,当您使用多个
变量出现在
与代码段输出中此处初始化的顺序相同
在别处重新排序(按字母顺序)
var testint=3
var teststring=“hi”
var testarr=[“一”,2,(函数三(){}]
var testobj={4:“四”,5:“五”,嵌套:{6:“六”,7:“七”}
console.log({testint})
log({testint,teststring,testarr,testobj})
将几个anwer组合成一个小函数
这对你有用吗
const log = function() {
const key = Object.keys(this)[0];
const value = this[key];
console.log(`${key}: ${value}`);
}
let someValue = 2;
log.call({someVlaue}); //someValue: 2
也适用于函数,甚至是函数本身
log.call({log});
// It would return the following
log:function() {
const key = Object.keys(this)[0];
const value = this[key];
console.log(`${key}: ${value}`);
}
惊讶地发现还没有超简单的解决方案
let varname = "banana"
console.log(`${JSON.stringify({varname}).split('"')[1]}`)
在控制台中打印varname
,这就是我的假设,只是想知道是否有人有一些可笑的方法。因为调用varlog(“foo”,foo)
可以工作,但在console.log('foo:'+foo)上并不能真正节省很多时间代码>是的,再仔细看一看,我认为您将无法实现这一点。你只是在找些语法糖吗?只是懒而已。这是varlog(foo)的不同之处
和console.log('foo:'+foo)代码>。这个问题还有:@najmeddine我已经用更好的格式复制了它。啊!谢谢:)我可能只是扩展javascript来转换所有的var赋值var foo=“bar”代码>到var foo={foo:“bar”}代码>(大部分是开玩笑的。)(大部分)这完全有效,思想并没有只传递一次变量名所带来的节省时间的好处。类似于只调用varlog(“foo”,foo)代码>。但是,它确实有效!:)谢谢你的回答。但是,当我尝试使用console.log({this})
?this
不是一个变量名,它是一个保留关键字:)