This is now an official project and will be eventually improved over there.
Last active
July 11, 2018 10:31
-
-
Save WebReflection/56d04ccb1e5b0e50c121 to your computer and use it in GitHub Desktop.
An attempt to polyfill Symbol for ES5 compatible engines
The spec requires them to work cross-realm but I'm not sure how engines are doing wrt to that compliance.
Right, I think that i'll have to be a sham. Looks great so far though!
Also, possibly a more reliable test for https://gist.github.com/WebReflection/56d04ccb1e5b0e50c121#file-symbol-js-L5 is if (typeof Symbol === 'function' && typeof Symbol() === 'symbol')
?
I think if getOwnPropertySymbols
is there we have to assume somebody else either patched upfront or the browser must support Symbol
natively. I don't see how that check can improve a sham, since we risk to overwrite other attempts that might be there and work as intended for reasons.
TL;DR I wouldn't go for that check, it's prolix for no advantages.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
not sure even natively
for
andkeyFor
would work cross realm (need to test) but I think there's no much I can do there (and x-realm is rarely a real-world problem). Conflicts are extremely highly improbable and using a DateTime won't give me much more security so ... not sure that's a real concern.typeof returns a primitive as specs say, and
string
is the only primitive that makes sense.Transpilers could wrap it as
typeOf()
and verify it's aSymbol
and sinceSymbol() instanceof Symbol
is false, as well asSymbol() instanceof Object
I don't think returning anObject
would be a better option than returning a string.If you hold a
Symbol
you should not have problems though, and since the whole logic is based on the assumption in order to retrieve symbols you need togetOwnPropertySymbols()
I guess we can live with the current state.That being said,
{__proto__: null}
andnull
objects are IMO a bigger, probably not worth fixing, gotcha ... but that plus all other concerns are the reason we cannot possibly have ashim
but only asham
for ES6