Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中实现枚举的最佳方法是什么?_Javascript_Performance_Enums - Fatal编程技术网

在JavaScript中实现枚举的最佳方法是什么?

在JavaScript中实现枚举的最佳方法是什么?,javascript,performance,enums,Javascript,Performance,Enums,我正在考虑一种在JavaScript中实现类似枚举的结构的好方法。我提出了一些解决方案,但哪一个是最好的 静态getter类: class Enum { static get A() { return 0; } static get B() { return 1; } static get C() { return 2; } } 这可以像var a=Enum.a//a==0那样使用 我在网上找到

我正在考虑一种在JavaScript中实现类似枚举的结构的好方法。我提出了一些解决方案,但哪一个是最好的

静态getter类:

class Enum {
    static get A() {
        return 0;
    }

    static get B() {
        return 1;
    }

    static get C() {
        return 2;
    }
}
这可以像
var a=Enum.a//a==0
那样使用

我在网上找到了一个使用对象的解决方案,并将其冻结:

const enum = {
    A: 0,
    B: 1,
    C: 2
}

Object.freeze(enum);
这可以像
var b=enum.b//b=1
一样使用


我想知道这种方法是否在性能和内存使用方面更好?

您可以使用TypeScript:

enum MyEnum {
 A = 0,
 B = 1,
 C = 2
}
但如果您需要vanilla JS,以下是TS编译器编译的代码:

var MyEnum;
(function (MyEnum) {
    MyEnum[MyEnum["A"] = 0] = "A";
    MyEnum[MyEnum["B"] = 1] = "B";
    MyEnum[MyEnum["C"] = 2] = "C";
})(MyEnum || (MyEnum = {}));
希望,这将有助于

您可以按以下方式使用:

const Colors = Object.freeze({
    A: 0,
    B: 1,
    C: 2
});

我测试了这两种方法,实现枚举的类方法实际上是最差的。 所以我会坚持冻结一个物体

类方法性能更好的唯一情况是在代码中的许多不同位置(在不同的模块usw…)使用枚举


但感谢大家的回答。

还有其他方法。以课堂为基础的方法绝对是最糟糕的选择。要求“最佳方式”做某事的问题要么得到好答案,要么落入“基于意见”的陷阱。请阅读。