有谁能够解释下面代码的输出结果吗?
enum days { sun = 1, mon = 0, tues };
console.log(days[1]); // 返回 tues // 预期输出 -- mon
console.log(days[0]); // 返回 mon // 预期输出 -- sun
此外,请解释一下我怎样才能在这个示例中打印出 sun?这个情况让我感到困惑。请您在执行代码并观察输出结果后,再提供有效的解释。
有谁能够解释下面代码的输出结果吗?
enum days { sun = 1, mon = 0, tues };
console.log(days[1]); // 返回 tues // 预期输出 -- mon
console.log(days[0]); // 返回 mon // 预期输出 -- sun
此外,请解释一下我怎样才能在这个示例中打印出 sun?这个情况让我感到困惑。请您在执行代码并观察输出结果后,再提供有效的解释。
enum days { sun = 1, mon = 0, tues };
TypeScript 可以编译成以下 JavaScript 代码:
var days;
(function (days) {
days[days["sun"] = 1] = "sun";
days[days["mon"] = 0] = "mon";
days[days["tues"] = 1] = "tues";
})(days || (days = {}));
;
这段代码涉及到it技术,具体翻译如下:
第一部分:days[days["sun"] = 1] = "sun";
首先执行days["sun"] = 1
,它会确保你可以调用days.sun
并获得值1,并返回键"sun"的值=>1。这意味着最初days[1]
将被设置为"sun"。
第二部分:days[days["mon"] = 0] = "mon";
确保你可以调用days.mon
并获得值0,并返回键"mon"的值=>0。所以days[0]
将被设置为"mon"。
然而,第三部分:days[days["tues"] = 1] = "tues";
执行days["tues"] = 1
,确保你可以调用days.tues
并获得值1,并返回键"tues"的值=>1。这意味着此时days[1]
将被覆盖为"value=tues"。
你构建枚举的方式很不寻常。 根据文档,未定义的枚举将通过将上一个值加1来自动创建一个值。
你当前的枚举结构将有两个值设置为1。TypeScript/JavaScript似乎会选择具有所需值的最后一项。
你的代码:
enum days{
sun = 1,
mon = 0,
tues
}
VS(来自我的一个正常工作项目的相似枚举)
enum days{
Sun = 0,
Mon,
Tue,
Wed,
Thu,
Fri,
Sat
}
如果枚举成员没有初始化器并且前一个枚举成员是常数,则当前枚举成员的值将是前一个枚举成员的值加一。这种情况下的一个例外是枚举的第一个元素。如果它没有初始化器,则其值为0。
tues
提供一个唯一的值(2),或者只是删除所有的值,那么你就可以通过days[days.sun]
打印出sun
。 - Philip Bijkersun
不再存在了。它被tues
覆盖了。只有键 sun 仍然存在。 - Philip Bijker