变量名称作为Javascript中的字符串

2020/11/03 02:42 · javascript ·  · 0评论

有没有办法在Javascript中将变量名作为字符串获取?(喜欢NSStringFromSelector可可

我想这样做:

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

--> myFirstName:John

更新

我正在尝试使用JavaScript连接浏览器和另一个程序。我想将实例名称从浏览器发送到另一个程序以用作回调方法:

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
中将变量名作为字符串获取?

通常,在需要将名称映射到某个值并能够同时检索两者的情况下,可以使用哈希表。

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

像塞思的答案,但Object.keys()改为使用

const varToString = varObj => Object.keys(varObj)[0]

const someVar = 42
const displayName = varToString({ someVar })
console.log(displayName)

您可以使用以下解决方案来解决您的问题:

const myFirstName = 'John'
Object.keys({myFirstName})[0]

// returns "myFirstName"

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

var x = 2;
for(o in window){ 
   if(window[o] === x){
      alert(o);
   }
}

但是,我认为您应该喜欢“ karim79”

这适用于基本表达

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);

为了安全起见,pop可能比用[0]索引要好(变量可能为null)。

const myFirstName = 'John'
const variableName = Object.keys({myFirstName}).pop();
console.log(`Variable ${variableName} with value '${variable}'`);

// returns "Variable myFirstName with value 'John'"
var somefancyvariable = "fancy";
Object.keys({somefancyvariable})[0];


由于它返回函数变量的名称,因此无法将其制成函数。

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

编辑:感谢@Madeo指出如何使之成为一个功能此

function debugVar(varObj) {
    var varName = Object.keys(varObj)[0];
    console.log("Var \"" + varName + "\" has a value of \"" + varObj[varName] + "\"");
}

您将需要使用包含变量的单个元素数组来调用该函数。debugVar({somefancyvariable});

编辑:
在我测试过的每个浏览器中都
Object.keys可以引用keys它,但是根据注释,它并非在所有地方都有效。

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);

当有一个函数编写一个可以更改不同全局变量值的函数时,它并不总是myfirstname,而是碰巧通过的任何东西。试试这个对我有用。

jsfiddle中运行

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

将写入窗口“ jack”。

到目前为止,我找到了将变量名作为字符串获取的简捷方法:

const name = obj => Object.keys(obj)[0];

const whatsMyName = "Snoop Doggy Dogg";

console.log( "Variable name is: " + name({ whatsMyName }) );
//result: Variable name is: whatsMyName

您可以反思javascript中的类型并获取属性和方法的名称,但是您需要的东西就像Lambda Expressions Trees.NET中一样,我认为由于javascript的动态特性和缺少静态类型系统,这是不可能的。

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

我没有将变量名转换为字符串,而是将字符串转换为变量。

这仅在变量名当然已知的情况下有效。

拿着它:

var height = 120;
testAlert(height);

这应该显示:

height: 120

可以这样完成:

function testAlert(ta)
{
    a = window[ta];
    alert(ta + ': ' + a); 
}

var height = 120;
testAlert("height");
// displays: height: 120

因此,我使用该字符串,"height"height使用window[]命令将其转换为变量

使用Object.keys()的最佳方法;

在全局范围内获取多变量名称的示例

// multi varibles for testing
var x = 5 , b = true , m = 6 , v = "str";

// pass all varibles you want in object
function getVarsNames(v = {}){
    // getting keys or names !
    let names = Object.keys(v);
    // return array has real names of varibles 
    return names;
}

//testing if that work or not 
let VarsNames = getVarsNames({x , b , m , v});

console.log(VarsNames); // output is array [x , b , m , v]

这可以通过Internet Explorer(9、10和11),Google Chrome 5使用:

   
var myFirstName = "Danilo";
var varName = Object.keys({myFirstName:0})[0];
console.log(varName);

浏览器兼容性表:https :
//developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

正如有人建议的那样,我已经基于JSON创建了此函数,可以很好地满足我的调试需求

function debugVar(varNames){
let strX = "";
function replacer(key, value){
    if (value === undefined){return "undef"}
    return value
    }    
for (let arg of arguments){
let lastChar;
    if (typeof arg!== "string"){
        let _arg = JSON.stringify(arg, replacer);
        _arg = _arg.replace('{',"");
        _arg = _arg.replace('}',"");            
        _arg = _arg.replace(/:/g,"=");
        _arg = _arg.replace(/"/g,"");
        strX+=_arg;
    }else{
    strX+=arg;
    lastChar = arg[arg.length-1];
    }
    if (arg!==arguments[arguments.length-1]&&lastChar!==":"){strX+=" "};
}
console.log(strX)    
}
let a = 42, b = 3, c;
debugVar("Begin:",{a,b,c},"end")

不,那里没有。

此外,如果您可以编写
variablesName(myFirstName),您已经知道变量名称(“ myFirstName”)。

本文地址:http://javascript.askforanswer.com/bianliangmingchengzuoweijavascriptzhongdezifuchuan.html
文章标签:
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!