UPDATE:最近出现了一个brilliant article from Mozilla.如果你有好奇心,可以读一读.

您可能知道,它们是ECMAScript 6中的planning to include个新符号基元类型(更不用说其他一些疯狂的东西了).我一直认为Ruby中的:symbol概念是不必要的;我们可以很容易地使用普通字符串,就像我们在JavaScript中所做的那样.现在,他们决定用这一点来让JS中的事情复杂化.

我不明白动机.有人能给我解释一下我们是否真的需要JavaScript中的符号吗?

推荐答案

将符号引入Javascript的最初动机是启用private个属性.

不幸的是,它们最终被严重降级.它们不再是私有的,因为你可以通过反射找到它们,例如,使用Object.getOwnPropertySymbols或代理.

它们现在被称为unique个符号,其唯一用途是避免属性之间的名称冲突.例如,ECMAScript本身现在可以通过某些方法引入扩展钩子,这些方法可以放在对象上(例如,定义它们的迭代协议),而不必冒与用户名冲突的风险.

这是否足以成为在语言中添加符号的动机,还有争议.

Javascript相关问答推荐

为什么这个自定义组件会被放置在TR之外?

除了在Angular 16中使用快照之外,什么是可行且更灵活的替代方案?

强制执行useStatego struct 化变量[foo,setFoo]的命名约定?

fetch在本地设置相同来源的cookie,但部署时相同的代码不会设置cookie

如何将拖放功能添加到我已自定义为图像的文件输入HTML标签中?

通过在页面上滚动来移动滚动条

了解Node.js中的EventEums和浏览器中的addEventEums之间的关系

格式值未保存在redux持久切片中

使用复选框在d3.js多折线图中添加或删除线条

togglePopover()不打开但不关闭原生HTML popover'

查找最长的子序列-无法重置数组

当Redux提供程序访问Reduxstore 时,可以安全地从Redux提供程序外部调用钩子?

如何从网站www.example.com获取表与Cheerio谷歌应用程序脚本

我可以使用使用node.js创建的本地主机来存储我网站上提交的所有数据吗?没有SQL或任何数据库.只有HTML语言

如果一个字符串前面有点、空格或无字符串,后面有空格、连字符或无字符串,则匹配正则表达式

JS Animate()方法未按预期工作

无法设置RazorPay订阅API项目价格

Node.js错误: node 不可单击或不是元素

使用CEPRESS截取时,cy.Wait()在等待5000ms的第一个路由请求时超时

将以前缓存的 Select 器与querySelector()一起使用