问题描述
您可能知道它们是新的Symbol原始类型(更不用说其他一些疯狂的了)东西)。我一直认为Ruby中的:symbol
概念是不必要的;我们可以轻松地使用纯字符串,就像我们在JavaScript中一样。现在他们决定用JS复杂化JS。
As you may know they are planning to include new Symbol primitive type in ECMAScript 6 (not to mention some other crazy stuff). I always thought that the :symbol
notion in Ruby is needless; we could easily use plain strings instead, like we do in JavaScript. And now they decide to complicate things in JS with that.
我不明白动机。有人可以向我解释我们是否真的需要JavaScript中的符号吗?
I don't understand the motivation. Could someone explain to me whether we really need symbols in JavaScript?
推荐答案
将符号引入Javascript的最初动机是启用私人属性。
The original motivation for introducing symbols to Javascript was to enable private properties.
不幸的是,他们最终被严重降级。它们不再是私有的,因为您可以通过反射找到它们,例如,使用 Object.getOwnPropertySymbols
或代理。
Unfortunately, they ended up being severely downgraded. They are no longer private, since you can find them via reflection, for example, using Object.getOwnPropertySymbols
or proxies.
它们现在称为唯一符号,它们唯一的用途是避免属性之间的名称冲突。例如,ECMAScript本身现在可以通过某些方法引入扩展钩子,这些方法可以放在对象上(例如定义它们的迭代协议),而不会有与用户名冲突的风险。
They are now known as unique symbols and their only intended use is to avoid name clashes between properties. For example, ECMAScript itself can now introduce extension hooks via certain methods that you can put on objects (e.g. to define their iteration protocol) without risking them to clash with user names.
这是否足够强大,为语言添加符号的动机是值得商榷的。
Whether that is strong enough a motivation to add symbols to the language is debatable.
这篇关于将符号引入ES6的动机是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!