2014-03-21 3 views
13

Возможно ли напечатать/отобразить имя переменной JavaScript? Например:Печать/отображение имени переменной JavaScript вместо его значения

var foo=5; 
var bar=6; 
var foobar=foo+bar; 

document.write(foo+ "<br>"); 
document.write(bar+ "<br>"); 
document.write(foobar + "<br>"); 

Как бы мы выводим имена переменных, так что результат будет:

foo 
bar 
foobar 

Вместо:

5 
6 
11 
+1

Это типичная проблема XY. почему ты хочешь сделать это? – elclanrs

+1

Вот пример использования. Во время тестирования я хочу проверить, подходит ли каждая переменная, которая, как мне кажется, из модуля. Если 'typeof var === undefined', я бы хотел, чтобы на экран выводился« var undefined ». Не вопрос XY для меня. – BaldEagle

+0

Другие сообщения, подобные этой, отмечены как дубликаты http://stackoverflow.com/questions/3404057/determine-original-name-of-variable-after-its-passed-to-a-function. Краткое изложение обсуждения во всех из них: можно передать функцию как строку имени переменной, так и переменную. Для других существует способ для глобальных переменных (с помощью 'window.x'). Для других можно сделать каждую переменную объектом. Затем можно использовать ключи объектов, чтобы получить имя переменной. Для безумцев можно написать код для разбора программы и получить переменную таким образом (удачи!) Для меня: это первый. – BaldEagle

ответ

5

Вы можете поместить переменные в object затем легко распечатать их следующим образом: http://jsfiddle.net/5MVde/7/

Смотрите скрипку для всего, это JavaScript ...

var x = { 
    foo: 5, 
    bar: 6, 
    foobar: function(){ 
     var that=this; 
     return that.foo+that.bar 
    } 
}; 

var myDiv = document.getElementById("results"); 

myDiv.innerHTML='Variable Names...'; 
for(var variable in x) 
{ 
    //alert(variable); 
    myDiv.innerHTML+='<br>'+variable; 
} 

myDiv.innerHTML+='<br><br>And their values...'; 
myDiv.innerHTML+='<br>'+x.foo+'<br>'+x.bar+'<br>'+x.foobar(); 

JavaScript for...in утверждение перебирает свойств object.

Другой вариант (спасибо @elclanrs), если вы не хотите foobar быть функцией: http://jsfiddle.net/fQ5hE/2/

+1

Вы забыли 'var', а' this' '' окно'. Не получится. – elclanrs

+0

Ваша демонстрация показывает, что 'for..in' работает, но ответ испорчен. Попробуйте напечатать 'x.foobar', и вы получите' NaN'. – elclanrs

+0

@elclanrs, спасибо. Обновленный ответ. @RalphDavidAbernathy может прочитать это ** http: //stackoverflow.com/a/134149/3112803** и решить, как он хочет обрабатывать метод «foobar». – gfrobenius

2
Utils = { 
    eventRegister_globalVariable : function(variableName,handlers){ 
     eventRegister_JsonVariable(this,variableName,handlers); 
    }, 
    eventRegister_jsonVariable : function(jsonObj,variableName,handlers){ 
     if(jsonObj.eventRegisteredVariable === undefined) { 
      jsonObj.eventRegisteredVariable={};//this Object is used for trigger event in javascript variable value changes ku 
     } 
     Object.defineProperty(jsonObj, variableName , { 
        get: function() { 
         return jsonObj.eventRegisteredVariable[variableName] }, 
        set: function(value) { 
         jsonObj.eventRegisteredVariable[variableName] = value; handlers(jsonObj.eventRegisteredVariable[variableName]);} 
        }); 
      } 
+2

, не могли бы вы рассказать об этом ответе или описать прецедент и результат? –

Смежные вопросы