在Javascript中以variables名称作为string

有没有办法在Javascript中获得一个string的variables名? (比如Cocoa中的NSStringFromSelector)

我想这样做:

var myFirstName = 'John'; alert(variablesName(myFirstName) + ":" + myFirstName); --> myFirstName:John 

– 添加

我正在尝试使用JavaScript连接浏览器和另一个程序。 我想从浏览器发送实例名称到另一个callback方法的程序。

 FooClass = function(){}; FooClass.someMethod = function(json) { // Do something } instanceA = new FooClass(); instanceB = new FooClass(); doSomethingInAnotherProcess(instanceB); // result will be substituted by using instanceB.someMethod(); 

….

[从另一个程序]

 evaluateJavascriptInBrowser("(instanceName).someMethod("resultA");"); 

在PHP中: 如何在PHP 中获取一个string的variables名?

通常情况下,对于想要将名称映射到某个值的情况,可以使用散列表,并且能够检索两者。

 var obj = { myFirstName: 'John' }; obj.foo = 'Another name'; for(key in obj) console.log(key + ': ' + obj[key]); 
 var x = 2; for(o in window){ if(window[o] === x){ alert(o); } } 

不过,我认为你应该像“karim79”

在ES6中,你可以写如下的东西:

 let myVar = 'something'; let nameObject = {myVar}; let getVarNameFromObject = (nameObject) => { for(let varName in nameObject) { return varName; } } let varName = getVarNameFromObject(nameObject); 

不是最好看的东西,但它完成了工作。

这利用了ES6的对象解构。

更多信息在这里: https : //hacks.mozilla.org/2015/05/es6-in-depth-destructuring/

这适用于基本expression式

 const nameof = exp => exp.toString().match(/[.](\w+)/)[1]; 

 nameof(() => options.displaySize); 

片段:

 var nameof = function (exp) { return exp.toString().match(/[.](\w+)/)[1]; }; var myFirstName = 'Chuck'; var varname = nameof(function () { return window.myFirstName; }); console.log(varname); 

像Seth的答案一样,但是使用Object.keys()来代替:

 const varToString = varObj => Object.keys(varObj)[0] const someVar = 42 const displayName = varToString({someVar}) 

由于ECMAScript 5.1,您可以使用Object.keys从对象中获取所有属性的名称。

这里是一个例子:

 // Get John's properties (firstName, lastName) var john = {firstName: 'John', lastName: 'Doe'}; var properties = Object.keys(john); // Show John's properties var message = 'John's properties are: ' + properties.join(', '); document.write(message); 

当有一个函数写一个函数,改变不同的全局variables值,它并不总是myfirstname它是无论发生什么经过。 试试这个为我工作。

 var jack = 'jill'; function window_getVarName(what) { for (var name in window) { if (window[name]==what) return(name); } return(""); } document.write(window_getVarName(jack)); 

将写入窗口'杰克'。

 var somefancyvariable = "fancy"; keys({somefancyvariable})[0]; 

由于它返回函数variables的名称,因此无法将其作为函数

 //THIS DOESN'T WORK function getVarName(v) { return keys({v})[0]; } //returns "v" 

不,那里没有。
另外,如果你可以写variablesName(myFirstName) ,你已经知道variables名(“myFirstName”)。

你可以在JavaScript中反映types,并获得属性和方法的名称,但是你需要的是像.NET中的Lambda Expressions Trees ,我认为这是不可能的,因为dynamic性和JavaScript中缺乏静态types系统。

我需要这个,不想使用对象,并提出了以下解决scheme,解决了这个问题。

而不是将variables名称转换为string,我将string转换为variables。

这只适用于variables名称是已知的。

拿着它:

 var height = 120; testAlert(height); 

这应该显示:

 height: 120 

这可以这样做:

 function testAlert(ta) { a = window[ta]; alert(ta + ': ' + a); } var height = 120; testAlert("height"); // displays: height: 120 

所以我使用string"height"并使用window[]命令将其变成可变height