任何人都可以从下面的代码解释我得到的输出吗?
enum days {sun = 1,mon = 0,tues};
的console.log(天[1]); //返回tues //预期输出 - 周一 的console.log(天[0]); //返回mon //期望输出 - sun
另外,请解释一下如何在这种情况下打印太阳?这种情况令我感到困惑。请求您在执行代码并观察输出后才能提供有效的解释。
答案 0 :(得分:2)
这个打字稿:
enum days { sun = 1, mon = 0, tues };
compiles对此javascript:
var days;
(function (days) {
days[days["sun"] = 1] = "sun";
days[days["mon"] = 0] = "mon";
days[days["tues"] = 1] = "tues";
})(days || (days = {}));
;
第一个部分:days[days["sun"] = 1] = "sun";
首先评估days["sun"] = 1
:
days.sun
并获得价值1 days[1]
将被设置为" sun"。 第二部分:days[days["mon"] = 0] = "mon";
days.mon
并获得价值0 days[0]
将被设置为" mon"。 第三部分:days[days["tues"] = 1] = "tues";
评估days["tues"] = 1
days.tues
并获得价值1 这意味着此时days[1]
将被覆盖值" tues"
答案 1 :(得分:-1)
你构建枚举的方式很不寻常。 根据文档,未定义的枚举将自动为自己创建一个值+1到前一个值。
您当前的枚举结构将有两个值设置为1. Typescript / javascript似乎选择了具有所需值的最后一项。
您的代码:
enum days{
sun = 1,
mon = 0,
tues
}
VS(来自我的一个项目的类似枚举工作正常)
enum days{
Sun = 0,
Mon,
Tue,
Wed,
Thu,
Fri,
Sat
}
根据文件(https://www.typescriptlang.org/docs/handbook/enums.html)
它没有初始化程序,前面的枚举成员是 不变。在这种情况下,当前枚举成员的值将是 前面枚举成员的值加一。一个例外 rule是枚举中的第一个元素。如果它没有初始化程序 它被赋值为0