【问题标题】:Variable name as string in JavaScriptJavaScript中的变量名作为字符串
【发布时间】:2013-06-26 07:31:05
【问题描述】:

有没有一种方法可以在 JavaScript 中检索变量的名称而不使其成为对象的一部分?这是我想要实现的一个示例:

var obj = {//Declared in a global scope
    init:function(){
        var var1 = /*value from input*/;
        var var2 = /*value from input*/;

        doCode({name:/*variable name as a string, "var1"*/,val:var1});
        doCode({name:/*variable name as a string, "var2"*/,val:var2});
        function checkNumber(args){
            if(typeof args.val != 'number')
                console.error("Error variable '"+arg.name+"' is not a number!");
            else
                console.log("Variable '"+arg.name+"' is a number!");
        }
    }
}
obj.init();

【问题讨论】:

  • 除非在非常特殊的情况下,例如当调用函数只调用一次checkNumber 时,使用一个变量作为其参数,或者该值在您可以从函数访问的某个对象中是唯一的,答案是“不”。为什么要这样做?
  • var1var2 在什么范围内声明?
  • 这个[变量名]怎么样?
  • @san.chez - 取决于范围,this 到底是什么,这就是我问的原因?
  • @PhilippeTrépanier:将它们全部保存在一个对象中,并传递名称。或者,传递字段并创建data-label 属性或其他内容,然后检查arg.value 并使用arg.dataset.label。 (请注意,如果这是用户输入,您的 typeof 检查可能不会按预期执行......)

标签: javascript variables variable-assignment


【解决方案1】:

这可能有效

var foo = 'bar'
var fooname
for (var i in window) {
  if (window[i] == foo) fooname = i
}
alert(fooname) // alerts 'foo'

upd当然,这有一些限制,例如你不能有两个具有相同内容的变量,但这是我仍然找到的唯一方法。

【讨论】:

  • 我不会在全局范围内使用它,而是使用对象,谢谢! +1 并正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 2013-08-27
相关资源
最近更新 更多