1:看到贝聊的FEer用一个函数实现了千分位:
function toThousands(num) { var num = (num || 0).toString(), result = ''; while (num.length > 3) { result = ',' + num.slice(-3) + result; num = num.slice(0, num.length - 3); } if (num) { result = num + result; } return result; } 作者:贝聊科技 链接:https://juejin.im/post/5a20fe96f265da431120025b 来源:掘金
底下马上有美团的FEer说可以用Num.toLocaleString()源生实现,查了caniuser。于是意外发现是ES3就有的Array.prototype上的方法,是所有浏览器都支持(特意指出IE6+不知何意。。)
而w3school说Date对象也有此方法:
所以提炼总结就是:
正常(chrome)下:
new Date().toLocaleString() // "2018/5/5 下午12:48:03" 像样的时间 [999,99,9,888,88,8,'a', 'z'].toLocaleString() // "999,99,9,888,88,8,a,z" 就是Arr.join(',') 2039475923.123.toLocaleString() // "2,039,475,923.123" Num加个千分位
IE7,IE10下:
可以看到对于Array的toLocaleString设置了去掉小数点是没有作用的
firefox:(正常)
navigator.appCodeName // "Mozilla" new Date().toLocaleString() // "2018/5/5 下午1:36:42" [999,99,9,888,88,8,'a', 'z'].toLocaleString() // "999,99,9,888,88,8,a,z" 2039475923.123.toLocaleString() // "2,039,475,923.123"
safari for windows:(异常)
navigator.userAgent // "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2" new Date().toLocaleString() // "Saturday, May 05, 2018 13:59:45" [999,99,9,888,88,8,'a', 'z'].toLocaleString() // "999,99,9,888,88,8,a,z" 2039475923.123.toLocaleString() // "2039475923.123" 异常 2039475923.toLocaleString() // Error var testNum = 111999222999333999 testNum.toLocaleString() // "111999222999334000" 异常
虽然不会强制加小数点后两个0,但千分位。。。貌似GG。
说明下:如果在chrome的apply相关移动设备模拟时是一切顺利的,不知道实际应用中,望有高人帮忙解答下
扯个蛋:
toLocaleString设计初衷应该是给开发者提供‘同一逻辑,世界各地都能看懂’的方法,调用时如果不传参,会默认宿主环境语言来返回结果,也可以用html标签的lang指定语言,这样执行时就默认用的lang