哈尔滨南岗区台式电脑网页软件出现两次创建同名Symbol却得到相同结果的情况,首先要区分使用的是Symbol.for还是普通Symbol。关键不在描述文字是否相同,而在创建时是否通过同一个可共享的符号注册表按字符串键查找。Symbol.for使用给定字符串作为注册键,如果当前注册表中已经存在对应符号,就返回已有符号;如果没有,才创建并登记新符号。普通Symbol则不同,即使连续两次传入完全相同的描述文字,也会分别创建两个不同的符号。因此,不能只看控制台显示的Symbol名称,就判断两个符号是否相同。

一、两种创建方式的区别
Symbol.for("record")表示按照record这个字符串键查询注册表。同一个可共享注册表中再次调用Symbol.for("record"),得到的是已经登记的符号。普通Symbol("record")则每次创建新的符号,描述文字只是便于辨认,并不是用于查找和复用的唯一键。可以用相等比较理解两者差异:假设同一运行环境中连续执行两次Symbol.for("record"),比较结果为相等;连续执行两次Symbol("record"),比较结果为不相等。这是创建机制不同,并不是浏览器随机选择了其中一种结果。
二、适用与观察哪些信息
如果网页代码需要在不同模块之间使用同一个约定的符号键,Symbol.for可以用于共享符号标识;如果需要每次创建独立标识,普通Symbol更符合这种用途。实际观察时,应分别记录调用的方法、传入的字符串键、两次调用所在的运行环境,以及比较符号本身的结果。还应区分符号描述与符号注册键:两个普通Symbol可以显示相同描述,却不是同一个符号;同一个注册表中的同一个键会返回同一个符号。不要仅凭打印结果或变量名称作判断。
三、风险与下一步
风险在于把同名描述误认为同一对象,或者把一个运行环境中的注册表复用现象直接推断到独立运行环境。Symbol.for的复用范围取决于是否处于同一个可共享的符号注册表,不能据此认定不同独立运行环境必然共享注册表;页面不同本身也不足以判断是否共享。下一步可以只读检查现有代码中两次调用的实际方法和参数,再对照去敏记录中的比较结果。如果两次均使用Symbol.for且处于同一可共享注册表,应重点核对注册键;如果使用普通Symbol仍出现相等判断,则需要进一步确认实际比较的变量是否就是两次创建所得的符号。适用范围仅限本题网页软件侧的信息核对。平台提供信息展示与第三方维修对接,不代表直接实施技术服务。哈尔滨南岗区台式电脑相关咨询可拨打400-877-9605,该号码仅供咨询,具体支持范围及安排须当次确认。