在 TypeScript 中有个比较有意思的类型叫做枚举,使用枚举类型可以为一组数值赋予友好的名字。最常见的就是比如说周一到周日,就可以用枚举表示。
官网用了一个小例子说明:
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
这个转化成 js 就是
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"; 的表示方法,这个是什么鬼?
我们知道对象在属性是 String 类型的,所以我猜测也就是使用了 String() 对中间的表达式进行了类型转化,我们在控制台可以简单的输入 String(Color["Red"] = 0),返回的结果为0。
其实这个就是基本的 js 运算规则,如果你理解下面的代码,你也就理解了为什么返回 0 了。
var a = b = 0
// a=0
// b=0
我想这个大多数人都能看懂,不过如果我们变动一下。
'use strict'
var a = b =0
那么这个就会报错,因为 b 没有使用 var 进行声明,这个就是 JS 运算规则中叫做“右结合”,上述代码正确的理解方式就是:
var a = ( b = 0 );
哈哈,我想你应该知道了,所以 String(Color["Red"] = 0) 的正确理解方式就是
var tmp = Color["red"] = 0;
String(tmp);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。