Javascript 为什么不直接检查属性而不是使用ES6符号呢

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

从我读到的ES6符号

如果是这种情况,并且我想检查对象上的名称冲突,为什么不使用一个简单的函数进行检查,然后在检查返回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");
    }
}
在《公认答案》的作者中说:“EcmaScript本身现在可以通过某些方法引入扩展钩子,您可以在对象上使用这些方法(例如,定义它们的迭代协议),而不必冒与用户名冲突的风险。”

我很好奇用更简单的话来说这意味着什么

我猜符号的“真正”用途是作为一种工具来帮助那些连接到标准机构的人实现新特性,而不破坏原有的代码

  [1]: https://stackoverflow.com/questions/21724326/why-bring-symbols-to-javascript
为什么不使用一个简单的函数来检查,然后在检查返回true时使用不同的属性名呢

因为这意味着每个人都需要做这些检查。需要有一个关于如何使用不同属性名称的协议

此外,还需要假设现有代码已经使用了所有可能的属性名。如果您想在中引入一个新的标准方法名,您可以选择哪一个?没有一个名字可以让你选择,它可以保证不会与任何东西发生冲突

我猜符号的“真正”用途是作为一种工具来帮助那些连接到标准机构的人实现新特性,而不破坏原有的代码


不,使用符号不必连接到标准机构。每个人都可以引入自己的属性名,而不会与其他代码冲突。它们对于需要处理任意对象且不想破坏封装的各种库都很有用。

在本文中:作者说“[符号]添加到语言中是为了解决扩展对象功能的问题,同时保持与早期版本JavaScript编写的代码的向后兼容性。“这是一个正确的语句吗?是的,但这不是唯一的原因。我试图得到一个简明的要点列表,说明这些东西存在的原因。所有的主要原因是什么?为什么这些东西存在?因为语言委员会认为它们很有用。这是如何发生的,出于什么原因,您需要通过es讨论档案。