js
s1=Symbol('hoge');
s2=Symbol('fuga');
o={};
o[s1]=1;
console.log(s1 in o);// true
console.log(s2 in o);// false
core-jsだと両方trueになる
primitiveではなくobjectをpropertyのkeyにした場合はToPrimitiveしてkeyにする。native実装のSymbolはprimitiveだけどpolyfillだと当然object。
どうも同一コンストラクタのobjectをpropertyのkeyにするとkey in objectで区別できないっぽい
これによる問題がcore-js@0.9.13ではまだある模様
native実装のSymbolがない場合は、Symbolをkeyとしているpropertyについて、key in objectしないとするのが解決策っぽい。IE11,AppleWebKit/600がなくなったら心配ない。
想定問答
Q:babel使ってはどうか?
A:帰れ