Javascript:从变量本身引用变量名

hoo*_*ter 21 javascript

我想创建一个快速函数,它将console.log变量名称和值.我希望在控制台中显示该函数的结果:foo: bar.

我对该函数的基本思想如下:

function varlog(var_name)
{
    console.log(var_name + ": " + eval(var_name));
}
Run Code Online (Sandbox Code Playgroud)

我打电话的是:

function someRandomFunction()
{
    var foo = "bar";
    // ... some stuff happens
    varlog("foo");
}
Run Code Online (Sandbox Code Playgroud)

如果foo是全局的,则此方法有效,但在提供的示例中不起作用.另一个只能全局运作的选择是使用window[var_name]而不是可怕的eval.

我不认为我问的是可能的,但我想我会把它扔出去.

我花了很多时间试图变懒.我目前的方法是console.log('foo: ' + bar);正常的.但现在我只想知道这是否可行.

我在搜索/创建现有内容时引用的其他一些问题:

-

编辑:varlog(foo)如果名称"foo"可以从变量派生,我很乐意打电话.

sql*_*00b 14

解决方案 - (针对您的实际使用案例) -console.log({foo})

ES6 IdentifierReference s的被接受为PropertyDefinitionS于所述ObjectLiteralPropertyDefinitionList(见兼容性图表):

变量名称被设置为Object's Property' ,变量被设置为's ' .key
ObjectPropertyvalue

作为console.log显示Objects的他们Propertiy/ IES' keyS和value就是你可以用它来查看您的变量的两个名称通过调用console.log({foo}).

请注意,当您object使用多个变量初始化单个匿名时,就像我在第二个中所做的那样,console.log它们在片段输出中以与此处初始化相同的顺序出现时,它们可能会在其他位置按字母顺序重新排序.

var testint = 3
var teststring = "hi"
var testarr = ["one", 2, (function three(){})]
var testobj = {4:"four", 5:"five", nested:{6:"six",7:"seven"}}
console.log({testint})
console.log({testint, teststring, testarr, testobj})
Run Code Online (Sandbox Code Playgroud)

答案 - (问题标题) -Object.keys({foo})[0]

您也可以使用这个速记Object Initializer一起Object.keys()到笔直访问变量名:

var name = "value"
console.log(Object.keys({name})[0])
Run Code Online (Sandbox Code Playgroud)


idb*_*ley 7

它不起作用的原因是因为变量foo不能访问该函数varlog! foo在someRandomFunction中声明,并且永远不会传入varlog,所以varlog不知道变量foo是什么!您可以通过将变量传递给foo函数(或使用某种类型的闭包foo在其范围内varlog)及其字符串表示来解决此问题,但除此之外,我认为您运气不好.

希望这可以帮助.