Ale*_*lls 11 javascript symbols node.js ecmascript-6
如何检查JS中的值是否为Symbol?
我没有看到一种Symbol.isSymbol()方法.我的测试(x instanceof Symbol)似乎也没有用.
jor*_*gos 14
用typeof检查:
typeof x === 'symbol'
Run Code Online (Sandbox Code Playgroud)
在 ES 2015 及更高版本中,typeof x === 'symbol'这就是所需要的。但是,如果您将代码转换为 ES 5.1 或更早版本,即使您使用 polyfill 作为Symbol内置代码,它也不会起作用。
我见过的每个 polyfill,包括 babel-polyfill,都typeof x === 'object'使用名为Symbol. 因此,在这些情况下,您可以检查Object.prototype.toString.call (x) === '[object Symbol]'*.
综合起来,我们得到:
function isSymbol (x) {
return typeof x === 'symbol'
|| typeof x === 'object' && Object.prototype.toString.call (x) === '[object Symbol]';
}
Run Code Online (Sandbox Code Playgroud)
*请注意,我没有instanceof在转译的场景中使用。问题instanceof在于它只对在与断言相同的全局上下文中创建的对象返回 true。因此,如果网络工作者将符号传递回您的页面,或者符号在 iframe 之间传递,x instanceof Symbol则将返回 false!这一直适用于所有对象类型,包括内置函数。instanceof通常工作得很好,但是如果您的代码有可能像我所描述的那样处于“多帧”场景中,请谨慎使用!
| 归档时间: |
|
| 查看次数: |
3032 次 |
| 最近记录: |