Не значение переменной, а именно её имя.
Хм, да никак.
Можно, однако, сделать такой финт:
(function() {
var getVarName = function tmp(){
let n = /getVarName\(([^)]+?)\)/.exec(tmp.caller !== null ? tmp.caller.toString() : '');
return n !== null ? n[1] : false;
}
let myVarName123456 = 1;
console.info(getVarName(myVarName123456)); // myVarName123456
}());
Но это грязный хак, неудобный и больше только "сделать на спор", чем рабочий; в реальном коде даже не знаю кто мог бы это использовать.
Возможно стоит пересмотреть архитектуру Вашего проекта, где используется идентификатор переменной как зависимая величина.
Переменные как раз и придумали чтобы не зависеть от названий.
Переменная не хранит подобную информации о себе, а значит получить ее строковое представление имени у Вас не получится.
Максимум, что вы можете сделать, это зная контекст переменной попытаться получить ее имя через родителя. Да и то, если только эта переменная является ссылочным объектом, а не переменной значения.
function context(){
this.a = { "test" : "test" };
for(key in this){
if(this[key] == a) console.log(key);
}
}
context();
Чтобы получить имя вы должны переменную обернуть объектом, вот так:
<script>
var myVariable = {};
myVariable["myVariable"] = 5; // заварачиваем переменную в массив
myVariable["myVariable"] = 7; // вот так работаем с переменной
alert(myVariable["myVariable"]); // вот так получаем ее значение
function getName(arrayVariable){ // функция для извлечения имени
for (key in arrayVariable)
return key;
}
alert(getName(myVariable)); // извлекаем имя
</script>
Это можно сделать, но переменная должна быть объектом, и ему необходимо дать уникальное свойство или метод по которому его можно будет отличить в списке прочих переменных. Получить и перебрать список переменных, среди которых окажется искомая, внутри документа можно вот так
for (var variable in window) {
//Анализ variable - она или не она
}
Внутри надо юзать eval
и typeof
чтобы получить доступ к объекту по его имени и определить наличие уникального свойства/метода. Немного нагружает браузер клиента, зато работает. Протестировано в фоксе.
Вот пример
var Class = function() {
}
Class.prototype.isOurVariable = function() {return true};
var object123 = new Class(); //Ищем имя этой переменной
for (var variable in window) {
if (!/[a-z]+/.test(variable)) {
//отсекаем свойства типа "0", есть такие
continue;
}
eval("var ok = (" + variable + " != null && typeof (" + variable + ".isOurVariable) != 'undefined');");
if (ok) {console.log(variable); break}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Пришлось разбираться в чужом javascript кодеНаткнулся на такого типа конструкцию Имеет вид