从我读过的ES6符号 "only use is to avoid name clashes between properties".。
如果是这种情况并且我想检查对象上的名称冲突,为什么不使用简单的函数来检查,如果检查返回true,则使用不同的属性名称?为什么要引入整个新数据类型? (我确定我很天真地问这个,但我不明白)
示例:
var obj = {
prop1: "some prop",
prop2: "some prop",
prop3: "some prop"
}
function propChecker(propName) {
if (propName in obj) {
console.log("Pick a different property");
}else{
console.log("Property name is available");
}
}
在this link中,接受回答的作者说:“EcmaScript本身现在可以通过某些方法引入扩展钩子,这些方法可以放在对象上(例如定义它们的迭代协议),而不会冒与用户名冲突的风险。 “
我很好奇这更简单的说法意味着什么。
我猜测符号的“真正”使用是帮助那些连接到标准体的人实现新功能而不破坏预先存在的代码的工具。
[1]: https://stackoverflow.com/questions/21724326/why-bring-symbols-to-javascript
答案 0 :(得分:2)
为什么不使用一个简单的函数来检查,如果检查返回true,则使用不同的属性名称?
因为这意味着所有人需要进行这些检查。并且需要有一个关于如何使用不同属性名称的协议。
此外,需要假设现有代码已经使用了所有可能的属性名称。如果您想在iteration protocol中引入一个新的标准方法名称,您可以选择哪一个?没有名称可以确保它不会与任何东西发生冲突。
我在猜测"真实"符号的使用是一种工具,用于帮助那些连接到标准体的人实现新功能,而不会破坏先前存在的代码。
不,您不必连接到标准机构来使用符号。 每个人都可以引入自己不会与其他代码冲突的属性名称。它们对于需要使用任意对象并且不想破解封装的各种库非常有用。