Javascript Node 8.0新符号,并在Number.prototype.toLocaleString()的符号后添加空格
我刚刚更新到节点v8.0,注意到Number.prototype.toLocalString()带有选项Javascript Node 8.0新符号,并在Number.prototype.toLocaleString()的符号后添加空格,javascript,node.js,google-chrome,currency,Javascript,Node.js,Google Chrome,Currency,我刚刚更新到节点v8.0,注意到Number.prototype.toLocalString()带有选项style:“currency”以及currency设置为任何货币,其行为与任何其他环境不同。在节点v7.2.1和Chrome v58.0中,我的输出看起来像$5.00,但在节点8中,它以不同的货币符号和额外的空间显示为US$5.00。这只是一个更新吗?我在哪里可以找到这方面的文档?节点是否刚刚决定更新到LocaleString,并应将其视为一个随环境变化的函数 const value=5 v
style:“currency”
以及currency
设置为任何货币,其行为与任何其他环境不同。在节点v7.2.1和Chrome v58.0中,我的输出看起来像$5.00
,但在节点8中,它以不同的货币符号和额外的空间显示为US$5.00
。这只是一个更新吗?我在哪里可以找到这方面的文档?节点是否刚刚决定更新到LocaleString
,并应将其视为一个随环境变化的函数
const value=5
value.tolocalString('en-US',{style:'currency',currency:'USD'})
节点8.0
'US$5.00'
节点<8.0+铬
'$5.00'
看起来我遇到的错误是在没有提供区域设置的情况下,所以value.toLocaleString(未定义,{style:'currency',currency:'USD'})
。我猜默认的语言环境不再是en-US
,因此导致了我的问题。谢谢你的帮助
是否应将其视为一个随环境变化的函数
是的,当然。来自和:
“计算依赖于数值字符串中的字符串值和位置,这些值和位置取决于实现和有效区域设置[…]”
尽管它注意到
“建议实现使用公共区域设置数据存储库(位于)提供的区域设置数据。”问题是由“icu”造成的。默认情况下,您使用的节点版本不包括“完整icu”。我找到了两种解决问题的方法。第一个涉及在运行时为节点提供完整的icu。第二个涉及从头编译节点,包括完整的icu
运行时方法
假设已安装Node8.11.1
。全局安装
npm install -g full-icu
阅读命令行消息以查看完整icu
文件的安装位置。在调用节点
命令时指定--icu data dir选项时,需要使用该选项。例如:
node --icu-data-dir=/some/where/.nvm/versions/node/v8.11.1/lib/node_modules/full-icu Your-App.js
用你的程序替换你的App.js。您也可以在本地安装完整icu
软件包,并对icu数据目录使用/nomble\u modules/full icu
参考:
编译方法
这种方法涉及从头编译节点,指定一个选项以在构建中包含完整icu
。我建议:
上述操作会预先临时切换节点版本,以便您可以在安装新的v8之前卸载节点8版本。别跳过那一步!构建节点可能需要一些时间
(如果您没有上述版本6,请使用nvm安装6
或使用其他不同于8的版本进行安装)
Ref:我刚刚在节点v8.0.0上进行了测试,一切正常。。。您可以在这里找到文档,我看到的错误似乎是在没有提供区域设置时出现的,因此value.toLocaleString(未定义,{style:'currency',currency:'USD'})
。我猜默认的语言环境不再是en-US
,因此导致了我的问题。谢谢你的邀请help@user7128475那么,如果en-US
不再有效,那么新的有效版本是什么?
nvm use 6
nvm uninstall 8
nvm install -s v8 --with-intl=full-icu --download=all