相关疑难解决方法(0)

使用ES6在Javascript中枚举

我正在用Javascript重建一个旧的Java项目,并意识到在JS中没有好的方法来做枚举.

我能想到的最好的是:

const Colors = {
    RED: Symbol("red"),
    BLUE: Symbol("blue"),
    GREEN: Symbol("green")
};
Object.freeze(Colors);
Run Code Online (Sandbox Code Playgroud)

const保持Colors被重新分配,并冷冻它防止突变的键和值.我正在使用符号,这Colors.RED是不等于0,或除了它自己之外的任何其他东西.

这个配方有问题吗?有没有更好的办法?


(我知道这个问题有点重复,但以前的Q/As都很老了,ES6给了我们一些新功能.)


编辑:

另一个解决序列化问题的解决方案,但我认为仍存在领域问题:

const enumValue = (name) => Object.freeze({toString: () => name});

const Colors = Object.freeze({
    RED: enumValue("Colors.RED"),
    BLUE: enumValue("Colors.BLUE"),
    GREEN: enumValue("Colors.GREEN")
});
Run Code Online (Sandbox Code Playgroud)

通过使用对象引用作为值,可以获得与Symbols相同的冲突避免.

javascript enums symbols immutability ecmascript-6

106
推荐指数
8
解决办法
8万
查看次数

是否可以在JavaScript中获取已定义符号的描述值?

假设我有一个符号,如const sym = Symbol('foo');.现在,有没有办法foo从该符号中获取值而不依赖于字符串操作?

我期待sym.toString()回来,'foo'但它会回来Symbol(foo).

更新

我找到了这个hacky解决方案,直到找到一个更好的解决方案:)

const key = Symbol.keyFor(sym) || (sym = sym.toString(), sym.substring(7, sym.length - 1));
Run Code Online (Sandbox Code Playgroud)

javascript node.js

8
推荐指数
1
解决办法
80
查看次数

如何获得符号名称(文字)?

以下情况:

var myVehicle = { brand: 'Tesla' };

var isMoving = Symbol();
var currentStatus = Symbol();

myVehicle[isMoving] = true;
myVehicle[currentStatus] = 'moving';
Run Code Online (Sandbox Code Playgroud)

我想在我的对象中打印使用过的“符号属性”的名称 myVehicle

console.log(
    myVehicle[isMoving],  // true
    myVehicle[currentStatus],  // 'moving',
    Reflect.ownKeys(myVehicle),  // [ 'brand', Symbol(), Symbol() ]
    Object.getOwnPropertySymbols(myVehicle), // [ Symbol(), Symbol() ]
);
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到这样的名字:

[isMoving, currentStatus] 代替 [ Symbol(), Symbol() ]

javascript symbols

4
推荐指数
2
解决办法
1822
查看次数

如何在Javascript中比较String和Symbol?

我有一个用Javascript定义的具有相同值的StringSymbolHello, Stack Overflow!。我如何比较它们的平等性?我在下面尝试过的所有比较都返回false。

var string="Hello, Stack Overflow!";
var symbol=Symbol("Hello, Stack Overflow!");

console.log(string == symbol);
console.log(string == symbol.toPrimitive);
console.log(string == symbol.toString);
console.log(string == symbol.toStringTag);
console.log(string === symbol);
console.log(string === symbol.toPrimitive);
console.log(string === symbol.toString);
console.log(string === symbol.toStringTag);
Run Code Online (Sandbox Code Playgroud)

javascript string comparison symbols

0
推荐指数
1
解决办法
2032
查看次数