Javascript 为什么不直接检查属性而不是使用ES6符号呢
从我读到的ES6符号 如果是这种情况,并且我想检查对象上的名称冲突,为什么不使用一个简单的函数进行检查,然后在检查返回true时使用不同的属性名称呢?为什么要引入一种全新的数据类型?(我肯定我问这个问题很幼稚,但我不明白) 示例:Javascript 为什么不直接检查属性而不是使用ES6符号呢,javascript,ecmascript-6,Javascript,Ecmascript 6,从我读到的ES6符号 如果是这种情况,并且我想检查对象上的名称冲突,为什么不使用一个简单的函数进行检查,然后在检查返回true时使用不同的属性名称呢?为什么要引入一种全新的数据类型?(我肯定我问这个问题很幼稚,但我不明白) 示例: var obj = { prop1: "some prop", prop2: "some prop", prop3: "some prop" } function propChecker(propName) { if (propNam
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");
}
}
在《公认答案》的作者中说:“EcmaScript本身现在可以通过某些方法引入扩展钩子,您可以在对象上使用这些方法(例如,定义它们的迭代协议),而不必冒与用户名冲突的风险。”
我很好奇用更简单的话来说这意味着什么
我猜符号的“真正”用途是作为一种工具来帮助那些连接到标准机构的人实现新特性,而不破坏原有的代码
[1]: https://stackoverflow.com/questions/21724326/why-bring-symbols-to-javascript
为什么不使用一个简单的函数来检查,然后在检查返回true时使用不同的属性名呢
因为这意味着每个人都需要做这些检查。需要有一个关于如何使用不同属性名称的协议
此外,还需要假设现有代码已经使用了所有可能的属性名。如果您想在中引入一个新的标准方法名,您可以选择哪一个?没有一个名字可以让你选择,它可以保证不会与任何东西发生冲突
我猜符号的“真正”用途是作为一种工具来帮助那些连接到标准机构的人实现新特性,而不破坏原有的代码
不,使用符号不必连接到标准机构。每个人都可以引入自己的属性名,而不会与其他代码冲突。它们对于需要处理任意对象且不想破坏封装的各种库都很有用。在本文中:作者说“[符号]添加到语言中是为了解决扩展对象功能的问题,同时保持与早期版本JavaScript编写的代码的向后兼容性。“这是一个正确的语句吗?是的,但这不是唯一的原因。我试图得到一个简明的要点列表,说明这些东西存在的原因。所有的主要原因是什么?为什么这些东西存在?因为语言委员会认为它们很有用。这是如何发生的,出于什么原因,您需要通过es讨论档案。