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})
ES6
IdentifierReference
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
不是一个变量名,它是一个保留关键字:)