Javascript 边缘上不存在Intl.NumberFormat.formatParts
如下所示,Microsoft Edge中似乎缺少Javascript 边缘上不存在Intl.NumberFormat.formatParts,javascript,number-formatting,missing-features,Javascript,Number Formatting,Missing Features,如下所示,Microsoft Edge中似乎缺少Intl.NumberFormat.formatParts: 然而,两者都告诉我我可以 我该怎么办?我似乎找不到任何网站谈论这个问题,也找不到polyfill(编辑:polyfill实际上在MDN上可用,但正如我在最后一句中所说,我更感兴趣的是为什么缺少此方法,而MDN和CanIUse都说它在Edge上可用) 我是这样使用它的: return (_numberFormat as any).formatToParts(val).map(({type
Intl.NumberFormat.formatParts
:
然而,两者都告诉我我可以
我该怎么办?我似乎找不到任何网站谈论这个问题,也找不到polyfill(编辑:polyfill实际上在MDN上可用,但正如我在最后一句中所说,我更感兴趣的是为什么缺少此方法,而MDN和CanIUse都说它在Edge上可用)
我是这样使用它的:
return (_numberFormat as any).formatToParts(val).map(({type, value}) => {
if (type === 'group')
return ' ';
return value;
}).reduce((string, part) => string + part);
(我所做的只是使用一个合适的空格字符,而不是unicode默认字符,这对于我的客户来说太细了)
我知道我可以解决这个问题(执行基本格式,然后自己替换unicode空间,或者实现polyfill),但我更感兴趣的是,这种方法似乎并不存在于边缘,而地球上的每个人似乎都相信它存在
欢迎任何意见:)
好心的问候,Edge中确实缺少这些方法:
console.log(Intl.NumberFormat.prototype.formatParts的类型);
log(Intl.DateTimeFormat.prototype.formatParts的类型)代码>嗯。。根据这个(),它是可用的。@wentjun正是我说的:)但是它不可用。我感到惊讶的是,似乎没有人谈论它在网络上的任何地方的边缘缺失。现在大多数人都在使用通过babel输出ES5的构建管道,这样你就可以使用最新的TypeScript和ES6语法,但你的构建与所有ES5浏览器兼容。Thx@AdrianBrand,我就是其中之一,我使用的是TypeScript,正如您可能从代码片段中猜到的。您可能已经猜到的另一件事是,TS中缺少formatToParts
,至少在我当前使用的版本中是如此(因此就像任何
技巧一样)。我不太确定我将TS文件传输到哪个EcmaScript版本,我必须仔细检查。无论如何谢谢你!检查tsconfig.json文件中编译器选项下的“target”:“es5”。根据这个问题(),它似乎在TypeScript中得到了修复,这意味着我必须运行旧版本的TS(因此是(\u numberFormat as any.)。formatParts
)。我决定使用单空格字体,这样千位分隔符对于我的客户端来说就足够宽了。谢谢你的意见Intl.NumberFormat.prototype.FormatParts
和Intl.DateTimeFormat.prototype.FormatParts
确实存在于Edge 18中。有关MDN中此问题的讨论,请参阅。@DowIP感谢有助于为答案添加详细信息的链接。