对象枚举语法

Javascript Object enumeration syntax

本文关键字:语法 枚举 对象      更新时间:2023-09-26

我有这个对象:

var State = {
  WAITING: 1,
  READY: 2
}

和这个对象用于获取状态的文本:

var Language = {
  States: {
    WAITING: "Waiting..",
    READY: "Ready!"
  }
}

我想像这样直接从state获取文本:

var state = State.READY;
var statusText = Language.States[state];

要使它工作,我需要,像这样的非法语法:

var Language = {
  States: {
    State.WAITING: "Waiting..",
    State.READY: "Ready!"
  }
}

但这不起作用,我可以用什么来简单地从状态变量中获取文本?

不,你没有。只是让你的价值是合理的,而不是魔法数字。在这种情况下,让它们使用映射到其他对象使用的键名的字符串,并完成:

var States = {
  WAITING: "WAITING",
  READY: "READY"
}
var Language = {
  States: {
    WAITING: "Waiting..",
    READY: "Ready!"
  }
}

瞧:

var state = States.WAITING;
var label = Language.States[state]

如果这些状态数字有意义,那么也要查找它们:

var responseCodes = {
  "0": "WAITING",
  "1": "READING",
  "403": "FORBIDDEN",
  ...
}

然后链接你的查找:

...
var responseCode = whatever();
var state = responseCodes[responseCode];
var label = Language.State[state];
...

试试这个:

var State = {
  WAITING: 1,
  READY: 2
};
var Language = {
  States: {}
};
Language.States[State.WAITING] = "Waiting..";
//evaluated as, Language.States[1] = "Waiting..";
Language.States[State.READY] = "Ready!";
var state = State.READY;
var statusText = Language.States[state];
alert(statusText);

您可能来自一个语言背景,其中枚举是表示整数值的名称的集合。在JS中使用字符串作为枚举值更容易,然后你可以直接使用它们作为键来查找哈希中的东西,或者直接在switch语句中使用它们,所以你根本不需要State变量。你所需要的是

var Language = {
  States: {
    WAITING: "Waiting..",
    READY: "Ready!"
  }
}
var state = 'READY';
var statusText = Language.States[state];