在 TypeScript 中有个比较有意思的类型叫作枚举,使用枚举类型能够为一组数值赋予友好的名字。最多见的就是好比说周一到周日,就能够用枚举表示。code
官网用了一个小例子说明:对象
enum Color {Red, Green, Blue} let c: Color = Color.Green;
这个转化成 js 就是ip
var Color; (function (Color) { Color[Color["Red"] = 0] = "Red"; Color[Color["Green"] = 1] = "Green"; Color[Color["Blue"] = 2] = "Blue"; })(Color || (Color = {})); var c = Color.Green; // Color = {0: "Red", 1: "Green", 2: "Blue", Red: 0, Green: 1, Blue: 2}
仔细看中间的代码会发现有个 Color[Color["Red"] = 0] = "Red"; 的表示方法,这个是什么鬼?io
咱们知道对象在属性是 String 类型的,因此我猜想也就是使用了 String() 对中间的表达式进行了类型转化,咱们在控制台能够简单的输入 String(Color["Red"] = 0),返回的结果为0。function
其实这个就是基本的 js 运算规则,若是你理解下面的代码,你也就理解了为何返回 0 了。方法
var a = b = 0 // a=0 // b=0
我想这个大多数人都能看懂,不过若是咱们变更一下。co
'use strict' var a = b =0
那么这个就会报错,由于 b 没有使用 var 进行声明,这个就是 JS 运算规则中叫作“右结合”,上述代码正确的理解方式就是:let
var a = ( b = 0 );
哈哈,我想你应该知道了,因此 String(Color["Red"] = 0) 的正确理解方式就是枚举
var tmp = Color["red"] = 0; String(tmp);