Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

JavaScript 数值的 I18N

  看到代码中有一坨从阿拉伯数字到汉字的 map 感觉实在太脏了。这应该是 I18N 的事情吧,为什么要在业务逻辑中做这样的 map 呢?其实很多浏览器对数值类型都有 I18N 支持,就阿拉伯数字转汉字这种最简单的需求,使用目前的 API 是可以实现的,可以不用手动去做 map。
  toLocaleString 是个神奇的方法,虽然它也是定义在 ES 规范中的,但规范没有定义具体的实现,把这个锅丢给了浏览器。目前的浏览器都是支持 toLocaleString 接收一些奇奇怪怪的参数来处理数值的。比如希望看到的是汉字可以这么玩:
<script> var result = 1234567..toLocaleString('zh-Hans-CN-u-nu-hanidec'); document.write(result); </script>   上面代码的运行结果虽然转换成了汉字,但是中间多了一坨逗号!?对没错,我就是传说中的千位分隔符!实际上它只是把英文风格的数字中,字母换成了中文而已,千位分隔符和小数点都会保留,所以结果看起来很傻逼。
  如果希望得到一个没有千位分隔符的结果可以加上 useGrouping: false,比如:
<script> var result = 1234567..toLocaleString('zh-Hans-CN-u-nu-hanidec', { useGrouping: false }); document.write(result); </script>   除了 useGrouping 外还有好多参数可以用,虽然可以在 MDN 上找到,但是请注意它并不是 ES 规范里的东西。
  最后还有一个奇怪的现象,由于这个方法不考虑精度,所以下面这个代码的执行结果就。。。
<script> var lang = 'zh-Hans-CN-u-nu-hanidec'; var result = Number.MAX_VALUE.toLocaleString(lang, { useGrouping: false }); document.write(result); </script>
网名:
34.203.213.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^