代码之家  ›  专栏  ›  技术社区  ›  Can Poyrazoğlu

Javascript将字符串常量定义为速记属性

  •  0
  • Can Poyrazoğlu  · 技术社区  · 6 年前

    有没有办法像速记属性那样定义字符串值,例如(这不起作用):

    const dict = {
        USER_LOGIN,
        USER_LOGOUT
    };
    

    const dict = {
        USER_LOGIN: "USER_LOGIN",
        USER_LOGOUT: "USER_LOGOUT"
    };
    

    我想定义一个常量字典,但我想知道我是否能以某种方式避免重复模式 MYVALUE : "MYVALUE"

    4 回复  |  直到 6 年前
        1
  •  1
  •   jo_va    6 年前

    只有当您有一个与要声明的属性同名的变量时,速记属性表示法才会起作用:

    const USER_LOGIN = 'USER_LOGIN';
    const USER_LOGOUT = 'USER_LOGOUT';
    
    const dict = {
        USER_LOGIN,
        USER_LOGOUT
    };
    
    console.log(dict);

    const dict = {
        USER_LOGIN: "USER_LOGIN",
        USER_LOGOUT: "USER_LOGOUT"
    };
    

    或者通过助手@CertainPerformance创建它。

        2
  •  3
  •   CertainPerformance    6 年前

    没有内置的方法可以自动执行类似的操作,但是如果您希望保持代码干燥,可以创建一个helper函数,当传递一个字符串数组时,该函数将创建一个具有以下属性的对象:

    const makeDict = arr => arr.reduce((a, str) => ({ ...a, [str]: str }), {});
    const dict = makeDict(['USER_LOGIN', 'USER_LOGOUT']);
    console.log(dict);
        3
  •  1
  •   Ele    6 年前

    key-value 在一个物体上。

    const USER_LOGIN = "USER_LOGIN";
    const USER_LOGOUT = "USER_LOGOUT";  
    
    const dict = { USER_LOGIN, USER_LOGOUT };
    
    console.log(dict);
    .as-console-wrapper { max-height: 100% !important; top: 0; }
        4
  •  1
  •   Patrick Roberts Benjamin Gruenbaum    6 年前

    开玩笑的:

    let dict;
    
    with(new Proxy({}, {
      get(_, key) { return key; },
      has(_, key) { return key !== "dict"; }
    })) {
      dict = {
        USER_LOGIN,
        USER_LOGOUT
      };
    }
    
    console.log(dict);

    那不行。。。

    但说真的:整个问题都是过火了。