toLocaleString作用

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

猜你喜欢

转载自blog.csdn.net/wmwmdtt/article/details/80204652