2017-07-07 40 views
4

任何人都可以解释我从下面的代码得到的输出吗?打字稿中输出的异常

enum days {sun = 1,mon = 0,tues};

console.log(days [1]); //返回tues //预期输出 - mon
console.log(days [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
  • 返回设定键“太阳” => 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”覆盖

+0

这肯定回答我的大部分问题..但我也想知道是否有一种方法,我可以在这里打印太阳 – hstg

+0

如果您为'tues'提供唯一值(2)或只删除所有值,那么您可以用'days [days.sun]'打印'sun'' –

+0

是的,这很好。假如我没有对当前代码进行更改,是否有可能或者是否已经按照您的指示覆盖了该值? – hstg

-1

你构建你的枚举的方式是不寻常的。 根据文档中的未定义枚举将自动创建一个值为+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

+0

我们可以在枚举中给出我们想要的值。请坚持为什么行为不符合预期的问题? – hstg

+0

@HiteshSikka因为你宣称它没有任何意义。你说index0的值是eq 1,那么在index1的值是0.这意味着index2(tuesday)的值也将是1.以这种方式创建的枚举根据最后一个值自动创建值。根据文档:https://www.typescriptlang.org/docs/handbook/enums.html ...在这种情况下,当前枚举成员的值将是前面的枚举成员加上一个值... – Roland

+0

@HiteshSikka现在你的枚举有两个值1。它看起来像typescript/js取得枚举时的值的最后一个实例defance(这是我的猜测) – Roland