String(a=1) 的值是多少?

在 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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值