Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вернуть имя переменной (https://javascript.ru/forum/misc/13340-vernut-imya-peremennojj.html)

Йакуд 26.11.2010 23:59

Вернуть имя переменной
 
Всем привет. У меня такая задача: нужно вернуть имя переменной. Мне это нужно для отладки скрипта. Пишу небольшой плагин.
Пример:
var number = 5;
function f(a){
  /*Тут нужна функция для возврата имени переменной*/
  return a;
}
alert(f(number));

Скрипт должен вывести "number", но никак не "5".
Главное условие! Изначально, имя переменной неизвестно...
Очень жду ответа, заранее спасибо!

SV0L0CH 27.11.2010 00:09

number.name='number';

Йакуд 27.11.2010 00:38

Нее, так дело не пойдет!
Ладно, поставлю вопрос немного иначе. Можно ли получить список всех инициализованных переменных? И как это сделать?

Gvozd 27.11.2010 00:39

используйте нормальные инструменты для отладки
firebug

dmitriymar 27.11.2010 20:37

конечно можеш. проверяй каждую из используемых переменых на её тип. та что не undefened-та инициализированна.только зачем изобретать велосипед если его до тебя изобрели)

Kolyaj 28.11.2010 09:29

Цитата:

Сообщение от dmitriymar
та что не undefened-та инициализированна

var a;

a инициализирована, но undefined.

dmitriymar 28.11.2010 15:57

не инициализированна она по типу-ты ей никакое значение не присвоил чтобы было ясно текстовая числовая ....она

Kolyaj 28.11.2010 16:15

Ну ок.
var a = undefined;

Или так
var a = 1;
//Много кода
a = undefined;

dmitriymar 28.11.2010 16:38

в смысле ты ей присваиваеш значение а она всё равно?

dmitriymar 28.11.2010 16:40

через tepeof проверяеш? а точно объявляеш её в теге скрипт?попробуй проверь её без много кода.

Kolyaj 28.11.2010 17:39

Я ничего не проверяю, не объявляю и не присваиваю. Я иллюстрирую, почему предложение плохое
Цитата:

Сообщение от dmitriymar
проверяй каждую из используемых переменых на её тип. та что не undefened-та инициализированна



Цитата:

Сообщение от dmitriymar
присваиваеш

Цитата:

Сообщение от dmitriymar
проверяеш

Цитата:

Сообщение от dmitriymar
объявляеш

присваиваешь, проверяешь, объявляешь.
Глаза режет.

dmitriymar 28.11.2010 17:51

Дак тебе дали хорошее -через отладчик это делать.не нравиться не читай)ты програмер или лингвист?)

Kolyaj 28.11.2010 17:55

Цитата:

Сообщение от dmitriymar
Дак тебе дали хорошее -через отладчик это делать

Мне это не надо было, я не ТС.

Цитата:

Сообщение от dmitriymar
ты програмер или лингвист?

http://ilyabirman.ru/meanwhile/2009/01/30/1/

dmitriymar 28.11.2010 18:00

блеснул-конкретно блеснул.был тут недавно у нас один такойже в презедентах-Ющенко звался))

VitAl2013 06.08.2013 11:44

От вопроса ушли далеко. Как вернуть имя переменной?
var name = 'Вася';
function showme (a) {console.log (a.чтото+" = "+a);}
showme (name);

Должно вывести в консоль:
"name = Вася"

VitAl2013 10.08.2013 21:46

Отвечу сам, подсказали.
Функция:
function showMe(v) { console.log(v+'='+eval(v)); }

А теперь хитрость - вызов функции:
showMe ('v');

Обратить внимание, что v в кавычках - передаётся как строка.

danik.js 11.08.2013 00:00

VitAl2013, что-то не работает:
var name = 'Вася';
function showMe(v) { console.log(v+'='+eval(v)); }
showMe (name);


че я делаю не так?

ruslan_mart 11.08.2013 05:51

Цитата:

var number = 5;
function f(a){
/*Тут нужна функция для возврата имени переменной*/
return a;
}
alert(f(number));
var myVar = 12345;

function f(a) {
   for(var i in window) if(window[i] === a) return i;
}

alert( f(myVar) );

Но это очень-очень-очень тупо. :)

danik.js 11.08.2013 09:23

Ruslan_xDD, а теперь рассмотрим пракический вариант, а не выдуманный:

// чоткие пацаны не гадят в global
(function(){

var myVar = 12345;
 
function f(a) {
   for(var i in window) if(window[i] === a) return i;
}
 
alert( f(myVar) );

})()

ruslan_mart 11.08.2013 11:57

danik.js, ведь автор писал, что хочет сделать свой плагин. 100% автор захочет получить название переменной именно в global. :D

VitAl2013 18.05.2014 09:53

danik.js,

showMe ('name');

VitAl2013 18.05.2014 10:10

Ruslan_xDD,
А если значение переменной 1 и таких переменых с таким значением штук 100. Есть какой-то более грамотный механизм? мой пример с eval не всегда работает как надо - только для глобальных переменных, если они объявлены внутри функции, то увы.

var a, b, c;
    function maximum(a, b) {
        if (a>b){
            c=a
            console.log ("c = a ="+ a);
        }
        else{
            c=b;
            console.log ("c = b ="+ b);
        }
        for(var i in window) if(window[i] === c) {
            alert (i);
            return i;
        }
            
    }

maximum (1,2);


Вот например - выдаёт как не трудно догадаться всегда "с"


Часовой пояс GMT +3, время: 23:11.