在 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);

isLishude
1.1k 声望16 粉丝

JS赛高!


下一篇 »
说说 XSRF 防范