有没有办法比较“\x3C!--”和“<!--”并在JavaScript中得到'true'?

Is there a way to compare "\x3C!--" with "<!--" and get 'true' in JavaScript?

在我的一个项目中,我必须解析 HTML 页面并检查每个解析的“候选标签”是否在预定义的标签定义字符串列表中。

当由于某种原因解析器 returns "\x3C!--" 作为“标记候选”时,问题出现了,所以当我将它与 "<!--" 进行比较时,我得到 false列表。

有什么方法可以true比较这些字符串吗?

更新:

为了澄清我的问题并解释错误发生的位置,我添加了 DevTools 面板的两个屏幕截图,Google Chrome,版本 104.0.5083.0(官方构建)dev(64 位)。

我们可以看到 nodeParse.tagOpening 的值在赋值后几乎立即发生了变化。挺奇怪的。

但更奇怪的是,如果我在本地范围内打开 nodeParse 对象的属性,则会显示 tagOpening.

的正确(初始分配)值

所以浏览器似乎知道显示的两个值实际上是等价的,但出于某种原因将它们区分开来。有什么意见吗?

在 HTML 文档中 <!-- 是评论的开始分隔符,即使在 <script> 标签中,参见 HTML-like Comments,所以我会避免将其作为字符串包含在内在你的代码中。

相反,您可以首先在 tag-defining 字符串中使用十六进制转义序列。例如:

nodeParse.tagOpening = '\x3C!--';
nodeData.tagStarter = '\x3C!--';

经过更深入的调查后,我发现 "\x3C!--" == "<!--" 始终是 true,没有额外的努力(见下面的屏幕截图)。

但是我们应该记住,字符串 "<!--"(以及任何更长的字符串)按原样存储在变量中,但在存储在对象的 [=27 中时会转换为 "\x3C!--" =].至少在 Google Chrome.

所以我们应该将对象的 属性 赋值给一个变量(比如 var s2 = ob.a;),如果我们想得到值 "<!--" 是肯定的。我不知道,所以我在我的代码中犯了一个错误。