我想创建一个快速函数,它将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的被接受为PropertyDefinition
S于所述ObjectLiteral
的PropertyDefinitionList
(见兼容性图表):
变量名称被设置为Object
's Property
'
,变量值被设置为's ' .key
Object
Property
value
作为console.log
显示Object
s的他们Propertiy
/ IES' key
S和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)
它不起作用的原因是因为变量foo
不能访问该函数varlog
! foo
在someRandomFunction中声明,并且永远不会传入varlog
,所以varlog
不知道变量foo是什么!您可以通过将变量传递给foo
函数(或使用某种类型的闭包foo
在其范围内varlog
)及其字符串表示来解决此问题,但除此之外,我认为您运气不好.
希望这可以帮助.
归档时间: |
|
查看次数: |
13746 次 |
最近记录: |