8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

JavaScript 中的“Variable”变量

Nihit Raj 1月前

48 0

我知道在 PHP 中可以有 \'variable\' 变量。例如,$x = \'variable\';$$x = \'Hello, World!\';echo $variable; // 显示 \'Hello, World!\'...

我知道在 PHP 中可以使用“variable”变量。例如,

$x = "variable";
$$x = "Hello, World!";
echo $variable; // Displays "Hello, World!"

在 JavaScript 中,是否可以通过字符串形式引用变量名称?该怎么做?

帖子版权声明 1、本帖标题:JavaScript 中的“Variable”变量
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Nihit Raj在本站《object》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 数组不是变量,如果你使用数组作为函数参数,JS 解释器将使用指向数组的指针。在编程中,某些术语的使用是精确的,而你要求的只有很少的意义

  • tl;dr:不要使用 eval !

    对此没有单一的解决方案。可以 通过 动态 某些 window ,但这对于函数的局部变量不起作用。 不会 成为 属性的 window let 定义的变量 const ,以及 class es。

    几乎总是有比使用可变变量更好的解决方案! 相反,您应该查看 数据结构 并为您的问题选择正确的结构。

    如果你有一组固定的名字,例如

    // BAD - DON'T DO THIS!!!
    var foo = 42;
    var bar = 21;
    
    var key = 'foo';
    console.log(eval(key));

    将这些名称/值存储为 对象 ,并使用 括号表示 法动态查找它们:

    // GOOD
    var obj = {
      foo: 42,
      bar: 21,
    };
    
    var key = 'foo';
    console.log(obj[key]);

    ES2015+ 简洁的属性符号 对现有变量执行此操作更加容易

    // GOOD
    var foo = 42;
    var bar = 21;
    var obj = {foo, bar};
    
    var key = 'foo';
    console.log(obj[key]);

    如果你有“连续”编号的变量,例如

    // BAD - DON'T DO THIS!!!
    var foo1 = 'foo';
    var foo2 = 'bar';
    var foo3 = 'baz';
    
    var index = 1;
    console.log(eval('foo' + index));

    那么您应该使用 数组 ,然后简单地使用索引来访问相应的值:

    // GOOD
    var foos = ['foo', 'bar', 'baz'];
    var index = 1;
    console.log(foos[index - 1]);
  • 2021 年,eval 在这方面变得毫无用处;至少在实际应用中是如此。即使您的 CSP 允许 eval,我也不知道有任何生产代码没有经过一些会弄乱您的变量名的压缩器。

  • eval 不仅无用,而且在严格模式下运行时也被禁用。许多框架默认启用严格模式,所以我希望我们会看到它消失 :)

  • @CristianTraìna:你在哪里读到过在严格模式下 eval 被禁用?事实并非如此。

  • 如果您迫切希望这样做,您可以尝试使用 eval():

    var data = "testVariable";
    eval("var temp_" + data + "=123;");
    alert(temp_testVariable);
    

    或者使用窗口对象:

    var data = "testVariable";
    window["temp_" + data] = 123;
    alert(window["temp_" + data]);
    
  • 要仅使用字符串引用 JavaScript 中的变量,可以使用

    window['your_variable_name']
    

    您可以设置和引用变量,以及变量中的对象。

  • 几乎总是,将其命名空间放入对象中比将所有变量全局附加到窗口上更好。为什么?范围有助于包含错误,避免名称冲突并使代码更易于理解。

  • 与 PHP 不同,JavaScript 不提供对全局数组(包含对当前声明的所有变量名的引用)的访问。因此,JavaScript 不提供对变量的本机支持。但是,只要将所有变量定义为数组或对象的一部分,就可以模拟此功能。这将为您创建一个全局数组。例如,不要像这样在 hello 全局范围内声明变量:

    var hello = 'Hello, World!';
    

    让我们将其封装在一个对象中。我们将该对象称为 vv (变量变量):

    var vv = {
        'hello': 'Hello, World! ',
        //Other variable variables come here.
    },
    referToHello = 'hello';
    

    现在我们可以通过索引来引用变量,并且由于可以使用变量提供数组索引,因此我们实际上是在使用变量:

    console.log(vv[referToHello]); //Output: Hello, World!
    

    你的问题的答案

    让我们将其应用到您在原始问题中提供的代码:

        var vv = {
            'x': 'variable',
            'variable': 'Hello, World!'
        };
        console.log(vv[vv['x']]); // Displays "Hello, World!"
    

    实际用途

    虽然上面的代码可能看起来非常繁琐和不切实际,但使用这种封装方式,JavaScript 中的变量还是有实际用途的。在下面的例子中,我们使用相同的概念来获取未定义数量的 HTML 元素的 ID。

    var elementIds = [],
            elements = ['message','fillOrStroke','sizePicker','colorPicker']; //The items in this array could be defined automatically via an input, database query, event, etc.
            elements.forEach( (element) => {
                elementIds[element] = document.getElementById(element);
            });
    

    此示例根据每个元素的 ID 声明变量(键为 elementIds ),并将该元素的节点分配为每个变量的值。由于 JavaScript 中通常不鼓励使用全局变量,因此为变量赋予唯一作用域(在本例中,在数组内声明它们 elementIds )不仅简洁,而且更负责任。

  • 您可以使用 全局 window 对象,或者 this

    window

    var data = "anyVariableName";
    window["temp_" + data] = 123;
    alert(window["temp_" + data]); //123
    

    或者使用点:

    var data = "anyVariableName";
    window.data = 123;
    alert(window.data); //123
    

    这:

    ar data = "anyVariableName";
    this["temp_" + data] = 123;
    alert(this["temp_" + data]); //123
    

    或使用点

    var data = "anyVariableName";
    this.data = 123;
    alert(this.data); //123
    

    一个现实生活中的例子:

    var tasksTableNameRandom = 'tasksTable_' + Math.random().toString(36).substr(2, 5);
    console.log('Tasks Table Object name: ' + tasksTableNameRandom);
    this.tasksTableNameRandom = $('#tasks-data-table').DataTable({
        ...
    });
    
  • 引用 12

    但只有当它在 Web 浏览器中运行时才有效 (?)。那么 Node.js 呢?

  • var vars = {};
    var var_name = "str";
    vars[var_name] = "working";
    console.log(vars["str"]);
    
  • 当然可以,但不要这么做。变量必须是全局的。

    var killingFunction = 'alert'
    var killMeNow = 'please'
    var please = 'You have been killed!'
    this[killingFunction](this[killMeNow])
  • 我使用对象来执行此操作。无需使用窗口:

    var myVars = {};
    
    let foo = "hello";
    myVars[foo] = 100;
    let bar = myVars[foo];
    

    只要确保 myVars 是全局的即可。

  • 您可以使用 JavaScript eval(str) 函数。

    该函数将提供的字符串转换为 JavaScript 代码,然后执行它。

    例如:

    eval("console.log('Hello, World!')"); // Logs hello world
    

    因此要将其用作变量,可以执行以下操作:

    var a = "Hello,";
    var hello = "World!";
    console.log(a + " " + eval(a)); // Logs hello world
    

    这将产生与以下完全相同的输出:

    console.log(a + " " + hello); // Logs hello world
    

    (示例取自 PHP 手册中的变量变量 。)

返回
作者最近主题: