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 将有助于缩短理解问题的时间。
软件和版本控制:
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 将有助于缩短理解问题的时间。