Javascript Node 8.0新符号,并在Number.prototype.toLocaleString()的符号后添加空格

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

我刚刚更新到节点v8.0,注意到Number.prototype.toLocalString()带有选项
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

运行时方法

假设已安装Node
8.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