ある symbol が、グローバルシンボルかどうか調べれるのかなーって思ったら、keyFor
で簡単にできる感じでした。
あと、せっかくなので wellknown-symbol かどうかも判定してみたいと思います。
const isGlobalSymbol = (symbol) => {
return Symbol.keyFor(symbol) !== undefined;
};
const isLocalSymbol = (symbol) => {
return Symbol.keyFor(symbol) === undefined;
};
const isWellknownSymbol = (function(){
const wellknown = Object.getOwnPropertyNames(Symbol)
.map(name => Symbol[name])
.filter(val => typeof val === 'symbol');
return (symbol) => {
return wellknown.includes(symbol);
};
})();
確認
isGlobalSymbol(Symbol.for('global')) //=> true
isLocalSymbol(Symbol.for('global')) //=> false
isWellknownSymbol(Symbol.for('global')) //=> false
isGlobalSymbol(Symbol('local')) //=> false
isLocalSymbol(Symbol('local')) //=> true
isWellknownSymbol(Symbol('local')) //=> false
isGlobalSymbol(Symbol.toPrimitive) //=> false
isLocalSymbol(Symbol.toPrimitive) //=> true
isWellknownSymbol(Symbol.toPrimitive) //=> true
利用場面は知らんです。
終わりです。