Skip to main content

is_symbol_like_key

Function is_symbol_like_key 

Source
pub(crate) fn is_symbol_like_key(k: &str) -> bool
Expand description

この処理系には実の Symbol 型が無く、Symbol.iterator 等の well-known symbol は "Symbol(Symbol.iterator)" という見た目のリテラル文字列で代用されている (obj[Symbol.iterator] = fn は内部的に obj.props["Symbol(Symbol.iterator)"] = fn という通常の文字列キー代入に化ける)。仕様上 Symbol キーは Object.keys/values/ entries/for...in/JSON.stringify/スプレッド構文等のあらゆる「文字列キー列挙」から 除外されるべきだが、これらの区別が無かったため、class Range { [Symbol.iterator](){} } のようなカスタムイテラブルの Symbol.iterator メソッド自体が列挙結果に漏れて見える バグだった(Object.assign/Reflect.ownKeys は仕様上 Symbol キーも対象のため 意図的にこのフィルタを適用しない)。