Проблема здесь, на самом деле, заключается в том, что вы не можете использовать значение для ключевой части при определении объекта буквально .
То есть это используетпостоянные значения, как и ожидалось:
var CONSTANT_A = 0, CONSTANT_B = 1;
var state_machine = {};
state_machine[CONSTANT_A] = "A";
state_machine[CONSTANT_B] = "B";
console.log(state_machine[0]); // => A
console.log(state_machine[1]); // => B
Но это не сработает, как ожидалось, вместо этого используйте строку CONSTANT_A
в качестве ключа:
var CONSTANT_A = 0, CONSTANT_B = 1;
var state_machine = {
CONSTANT_A: "A",
CONSTANT_B: "B",
};
console.log(state_machine[0]); // => undefined
console.log(state_machine["CONSTANT_A"]); // => A
console.log(state_machine.CONSTANT_A); // => A
В JavaScript есть сокращение для определения литералов объектов, где вы можете опустить двойные кавычки вокруг ключей.Выражения не могут быть использованы, поэтому CONSTANT_A
не будет оцениваться.
См. Также @ ответ Кристиана ниже: ES6 / современный JS, по сути дела, то, что вы хотите, возможно.