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