Internet Explorer 11 和 javascript Date.toLocaleDateString() 产生隐藏字符

Internet Explorer 11 and javascript Date.toLocaleDateString() produces hidden characters

软件和版本控制:

IE11

Windows 10 21H1(OS 内部版本 19043.1110)

所以我在 IE11 中工作时发现了一些与调用 Date.toLocaleDateString 相关的有趣的东西,我想 post 因为我在 SO 或互联网上找不到这样的东西那件事。以此为例:

使用构造函数 new Date(year, month, day, hour, minute, second, millisecond) 创建一个新的 Date 对象,然后调用 .toLocaleDateString(),在我的例子中,我传递的格式是“en-US”,所以 new Date(2021, 1, 1, 0, 0, 0, 0).toLocaleDateString("en-US"); 2021 年 2 月 1 日午夜 0 分 0 秒 0 毫秒。

现在,如果我这样做 new Date(2021, 1, 1, 0, 0, 0, 0).toLocaleDateString("en-US").length;,我得到 13,而不是预期的“2/1/2021”长度 8。那么,这是怎么回事??

我终于找到了答案,方法是从 new Date(2021, 1, 1, 0, 0, 0, 0).toLocaleDateString("en-US") 中获取 IE11 中返回的字符串并将其粘贴到 Chrome 的控制台 window 中。它在月份、日期和年份值的左侧和右侧显示了这些小点。

我发现这些是从左到右的标记字符或简称LRM,在Internet Explorer 的控制台window 中显示时是看不到的。感谢 Internet Explorer!

为了在与表示相同日期但未通过对 new Date.toLocaleDateString("en-US") 的调用馈送的字符串值进行比较时获得预期结果,我不得不在末尾链接对 .replace() 的调用以获取摆脱隐藏的 LRM 字符,简而言之,要解决此问题,请使用: new Date(2021, 1, 1, 0, 0, 0, 0).toLocaleDateString("en-US").replace(/‎|\u200E/gi, "").

现在此比较在 IE11 中有效:new Date(2021, 1, 1, 0, 0, 0, 0).toLocaleDateString("en-US").replace(/‎|\u200E/gi, "") === "2/1/2021"; 并生成 true 但此比较无效:new Date(2021, 1, 1, 0, 0, 0, 0).toLocaleDateString("en-US") === "2/1/2021"; 并产生错误。

据我所知,这在 Edge、Chrome 或 Firefox 中不是问题。无论如何,如果有人像我一样对此感到沮丧,也许 post 将有助于缩短理解问题的时间。