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