资讯专栏INFORMATION COLUMN

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

ephererid / 902人阅读

摘要:在中有个比较有意思的类型叫做枚举,使用枚举类型可以为一组数值赋予友好的名字。最常见的就是比如说周一到周日,就可以用枚举表示。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91894.html

相关文章

  • JavaScript中,{}+{} 等于多少?

    摘要:如果返回值是一个原始值,则返回这个原始值。如果或者中的任意一个为字符串,则将另外一个也转换成字符串,然后返回两个字符串连接操作后的结果。因此,的结果实际上是两个空字符串的连接。 原文:What is {} + {} in JavaScript? 译者:justjavac 最近,Gary Bernhardt 在一个简短的演讲视频Wat中指出了一个有趣的 JavaScript 怪癖...

    Jrain 评论0 收藏0
  • 【进阶1-3期】JavaScript深入之内存空间详细图解

    摘要:进阶期理解中的执行上下文和执行栈进阶期深入之执行上下文栈和变量对象但是今天补充一个知识点某些情况下,调用堆栈中函数调用的数量超出了调用堆栈的实际大小,浏览器会抛出一个错误终止运行。 (关注福利,关注本公众号回复[资料]领取优质前端视频,包括Vue、React、Node源码和实战、面试指导) 本周正式开始前端进阶的第一期,本周的主题是调用堆栈,今天是第3天。 本计划一共28期,每期重点攻...

    coordinate35 评论0 收藏0
  • Java学习笔记2-基本数据类型

    摘要:对象数组都是引用数据类型。低高数据类型转换必须满足如下规则不能对类型进行类型转换。强制类型转换条件是转换的数据类型必须是兼容的。声明变量的基本格式如下格式说明为数据类型。但为了对类的使用者可见,大多数静态变量声明为类型。 变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。 因此,...

    ThinkSNS 评论0 收藏0
  • 【JS基础】类型转换知多少

    摘要:正确的解释是允许在相等比较中进行强制类型转换,而不允许。参考资料小议下字符串比较大小中的强制类型转换核心概念类型转换对象和方法隐式类型转换小结 开胃菜 先说一个题外话,我在工作中遇到一个问题,需要比较 08:00 和 09:00 的大小,最后我找到三种方法: 在两个字符串前后各拼接相同的年月日和秒,拼成完整的时间格式进行比较: var head = 2016-01-01 var fo...

    AdolphLWQ 评论0 收藏0

发表评论

0条评论

ephererid

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<