代码之家  ›  专栏  ›  技术社区  ›  Idan Gozlan

是否可以通过变量访问es6常量?

  •  3
  • Idan Gozlan  · 技术社区  · 8 年前

    是否可以通过变量访问ES6常量?

    例如。

    const OPEN_TAB = 0;
    const CLOSE_TAB = 1;
    
    let action = 'OPEN';
    
    console.log(window[`${action}_TAB`]); <-- something like that
    
    2 回复  |  直到 8 年前
        1
  •  9
  •   Felix Kling    8 年前

    不,没有(*)。 const 声明不会成为全局对象的属性。

    您需要找到另一个解决方案,例如创建一个对象并将其冻结(使其不可变):

    const TAB = Object.freeze({
      OPEN: 0,
      CLOSE: 1,
    });
    
    console.log(TAB[action]);
    

    我认为依赖于全局变量(即。 var )不管怎样,成为全局对象的属性都是糟糕的设计。如果您想按名称查找某个东西,您确实应该有一些东西,如地图或记录(如上所示)。


    *A:嗯,你可以用 eval ...

        2
  •  0
  •   Community SqlRyan    7 年前

    对于当前的代码,可以使用 eval ( But take care! ) ,应该是这样的:

    const OPEN_TAB = 0;
    const CLOSE_TAB = 1;
    
    let action = 'OPEN';
    
    console.log( eval (action+'_TAB') );

    另一种方法是将新对象假定为 const ,然后您可以访问 康斯特 与访问JavaScript对象的常见方式类似:

    const TAB = {
    OPEN:0,
    CLOSE:1
    };
    
    
    let action = 'OPEN';
    
    
    console.log(TAB[action]);