打字稿中输出的异常
任何人都可以解释我从下面的代码得到的输出吗?打字稿中输出的异常
enum days {sun = 1,mon = 0,tues};
console.log(days [1]); //返回tues //预期输出 - mon
console.log(days [0]); //返回星期一//预计输出 - 太阳
另外,请解释我如何在这种情况下打印太阳?这种情况令我困惑。只有在您执行了代码并观察了输出后,才要求您提供有效的解释。
这打字稿:
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 - 返回设定键“太阳” => 1。这意味着最初
days[1]
将成为价值设置为“太阳”。
的第二部分:days[days["mon"] = 0] = "mon";
- 可以确保你能打电话
days.mon
并获得价值0 - 回报设定键 “星期一”=> 0的值。所以
days[0]
将被设置为“星期一”。
这第三但是部分:days[days["tues"] = 1] = "tues";
评估days["tues"] = 1
这
- 可以确保你能打电话
days.tues
并获得价值1 - 也返回设定值键“tues”=> 1
这意味着此时days[1]
将被值“tues”覆盖
你构建你的枚举的方式是不寻常的。 根据文档中的未定义枚举将自动创建一个值为+1,以前面的值。
您当前的枚举结构将有两个值设置为1.ScriptScript/JavaScript似乎选择具有所需值的最后一个项目。
您的代码:
enum days{
sun = 1,
mon = 0,
tues
}
VS
enum days{
Sun = 0,
Mon,
Tue,
Wed,
Thu,
Fri,
Sat
}
按照文件(从我的一个项目工作正常了类似的ENUM)(https://www.typescriptlang.org/docs/handbook/enums.html)
它不有一个初始化器,前面的枚举成员是 常量。在这种情况下,当前枚举成员的值将为 前一个枚举成员的值加1。规则 的一个例外是枚举中的第一个元素。如果没有初始化 它被分配值0
我们可以在枚举中给出我们想要的值。请坚持为什么行为不符合预期的问题? – hstg
@HiteshSikka因为你宣称它没有任何意义。你说index0的值是eq 1,那么在index1的值是0.这意味着index2(tuesday)的值也将是1.以这种方式创建的枚举根据最后一个值自动创建值。根据文档:https://www.typescriptlang.org/docs/handbook/enums.html ...在这种情况下,当前枚举成员的值将是前面的枚举成员加上一个值... – Roland
@HiteshSikka现在你的枚举有两个值1。它看起来像typescript/js取得枚举时的值的最后一个实例defance(这是我的猜测) – Roland
这肯定回答我的大部分问题..但我也想知道是否有一种方法,我可以在这里打印太阳 – hstg
如果您为'tues'提供唯一值(2)或只删除所有值,那么您可以用'days [days.sun]'打印'sun'' –
是的,这很好。假如我没有对当前代码进行更改,是否有可能或者是否已经按照您的指示覆盖了该值? – hstg