【问题标题】:Why Symbol.iterator was designed of type Symbol?为什么 Symbol.iterator 被设计为 Symbol 类型?
【发布时间】:2021-05-23 14:30:15
【问题描述】:

我正在学习 Symbol 和 JavaScript 中的迭代器。 我已经阅读并观看了一些关于它们的视频,所以现在或多或少都清楚了。

我只是想了解我的教科书(Eloquent JavaScript)是什么意思:

请注意,nextvaluedone 属性名称是纯字符串,而不是符号。只有Simbol.iterator,它可能被添加到许多不同的对象中,是一个实际的符号。

为什么可能在不同对象中找到的属性需要是符号?

objOne.iteratorobjTwo.iterator 作为常规属性会产生问题吗?

【问题讨论】:

    标签: javascript iterator symbols


    【解决方案1】:

    符号是对象的独特属性。如果一个人创建了一个符号并将其放在一个对象上,那么任何其他符号都不会被放置在该对象上并由于名称冲突而导致错误。

    Symbol.iterator 用作唯一符号 用于潜在任何 对象的迭代器可以消除属性冲突错误的可能性。例如,如果 .iterator 是使用的(字符串)属性,则对象不能再轻松地拥有 .iterator 属性除非它专门实现了迭代器协议。

    还要考虑遗留代码,这些代码可能包含具有iterator 属性的对象,但不打算成为 ES2015+ 迭代器 - 它们应该如何处理?最好使用符号,这样就不必担心这些东西了。

    anyPossibleObj[Symbol.iterator]anyPossibleObj.anyStringYouCouldThinkOf 安全得多。

    【讨论】:

    猜你喜欢
    • 2022-07-16
    • 2021-06-18
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 2015-09-10
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多