我遇到了一个IE调用JavaScript的错误。length
函数返回一个值,如果/当字符串派生自.toLocaleString()
时,该值会减1。
var d = new Date();
var locale = navigator.language;
var month = d.toLocaleString(locale, { month: "long"});
// month.length will return the length of the month string +1
//(eg: if month = "March", month.length will return 6.)
有趣的是,上面的代码示例将返回true(在IE中)以下内容:(month [0]应为“M”)
month[0] == "";
month[1] == "M";
month[2] == "a";
month[3] == "r";
month[4] == "c";
month[5] == "h";
在我的特定情况下,这导致我需要.slice()
月份的问题。示例:如果月份是3月,那么IE将返回“Ma”作为month.slice(0,3)
而不是“Mar”。
这是IE的已知错误吗?是否有针对此问题的修复和/或解决方法?
在IE和Chrome / Firefox / Safari中运行此fiddle,并注意IE中month.length
的错误。
我的环境:
操作系统:Win Server 2012 R2
IE版本:11.0.9600.18231(更新版本:11.0.29)
区域设置:英语/美国
答案 0 :(得分:9)
所以,我偶然发现了这篇文章toLocaleDateString error in IE 11
看起来它是由toLocaleDateString函数在IE11中添加额外的LTR和RTL字符引起的。其中一条评论给出了正在使用的正则表达式替换功能。
month.replace(/[^ -~]/g,'');
尝试在执行.toLocaleDateString()
后添加它,它应该可以正常工作。它对我有用。
我们鄙视IE的另一个原因。