如果我想在一行中定义多个符号,语法有点冗长:
const a = Symbol('a'),
b = Symbol('b'),
c = Symbol('c');
我想出了一个更简洁的方法来做到这一点:
const [a, b, c] = ['a','b','c'].map(key => Symbol(key))
这是最简洁的方法,还是有一些专门的语法来声明我不知道的多个符号?
P.S。 'a'''b'和'c'当然只是任意的例子。我意识到人们可以通过这个特殊的例子变得聪明;)
答案 0 :(得分:2)
你可能会错过一个有趣的FP部分,那就是在纯系统中,你总是可以用返回的命名引用替换匿名函数(更常见的是,你可以随时将函数替换为它将返回的值),假设您要替换的函数和替换它的函数使用相同数量的参数。
const [a, b, c] = ["a", "b", "c"].map(Symbol);
只要你记住你可以在这里造成事故,通过传递期望超过1个参数的函数,应该工作得很好。
当然,没有比你已经拥有的更简洁。 ......但仍然不止。
答案 1 :(得分:1)
如果您不介意使用无法填充的仅ES6功能,可以使用一个选项,即使用Proxy
为每个属性访问返回一个符号。你可以制作一个像
module.exports = function autoSymbols() {
return new Proxy({}, {
get(target, name, receiver){
return Symbol(name);
},
});
}
然后做
const {a, b, c} = require('./auto-symbols');
虽然我个人认为手动枚举Symbol
实例更容易维护。
答案 2 :(得分:1)
它可以像
一样简洁const [a, b, c] = ['a','b','c'].map(Symbol);
这里没有办法跳过 abc 重言式,因为应该明确写出变量名,以及符号说明。
符号描述有助于调试。如果它们可以省略(不推荐),则变为
const [a, b, c] = [,,].map(Symbol);
用于固定数量的变量。和
const [a, b, c, d /*, ... */] = function* () { for(;;) yield Symbol() }();
无限量的变量。