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

时间:2019-04-14 22:27:26

标签: javascript ecmascript-6

有什么方法可以定义一个字符串值,例如简写属性,例如(这不起作用):

const dict = {
    USER_LOGIN,
    USER_LOGOUT
};

这将等同于:

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

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

是否有任何简便的方法可以声明对象键的值等于它们的字符串值,类似于上面的(无效)代码?

4 个答案:

答案 0 :(得分:3)

没有内置的方法可以自动执行类似的操作,但是,如果您想保持代码为DRY,则可以创建一个辅助函数,该函数在传递字符串数组时会创建具有以下属性的对象:

const makeDict = arr => arr.reduce((a, str) => ({ ...a, [str]: str }), {});
const dict = makeDict(['USER_LOGIN', 'USER_LOGOUT']);
console.log(dict);

答案 1 :(得分:1)

开个玩笑:

let dict;

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

console.log(dict);

如果您认为无效... ,请尝试:)

但认真的是:整个问题都不过分。

答案 2 :(得分:1)

您可以声明它们并将这些常量用作对象上的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; }

答案 3 :(得分:1)

速记属性表示法仅在您具有与要声明的属性同名的变量时才有效:

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的帮助程序进行创建。