在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
。