以下是TypeScript:

enum PrimaryColors { Red, Green, Blue };

产生以下JavaScript:
var PrimaryColors;
(function (PrimaryColors) {
    PrimaryColors[PrimaryColors["Red"] = 0] = "Red";
    PrimaryColors[PrimaryColors["Green"] = 1] = "Green";
    PrimaryColors[PrimaryColors["Blue"] = 2] = "Blue";
})(PrimaryColors || (PrimaryColors = {}));
;

我很尴尬地承认我不了解JavaScript在做什么。
括号中的函数是使用另一个分配作为索引/键来分配字符串值。我以前从未见过这样的东西。
函数后面的(PrimaryColors ||(PrimaryColors = {})的目的是什么?
如果答案是正确学习JavaScript,我将很乐意接受它,只要它带有建议的来源,可以清楚地说明我在这里看到的内容。

最佳答案

我相信:

PrimaryColors[PrimaryColors["Red"] = 0] = "Red";

等效于:
PrimaryColors[0] = "Red";
PrimaryColors["Red"] = 0;

看到这个reference



例如:
console.log((x = 7));

输出:
7

类似地:
var x = {};
console.log((x["hi"] = 7));

也输出7。

至于第二件事,PrimaryColors最初是未定义的。
var x;
console.log(x); // undefined

在 bool(boolean) 上下文中,undefined的计算结果为false:
console.log(!undefined); // true
console.log(!!undefined); // false

完整性检查:
console.log((!undefined) === true); // true
console.log((!!undefined) === false); // true
console.log(undefined === false); // false

这是短路的常见用法。因为PrimaryColors最初是未定义的(false),所以它将{}传递给函数。
PrimaryColors || (PrimaryColors = {})

关于javascript - TypeScript中的枚举:JavaScript代码在做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20278095/

10-12 12:16
查看更多