16

我无法理解JavaScript 中对象的toString()toLocaleString()方法之间的区别。Date我知道的一件事是,只要需要将对象转换为字符串,toString()就会自动调用它。Date

以下代码始终返回相同的结果:

​var d = new Date();
document.write( d + "<br />" );
document.write( d.toString() + "<br />" );
document.write( d.toLocaleString() );

​ 输出为:

Tue Aug 14 2012 08:08:54 GMT+0500 (PKT)
Tue Aug 14 2012 08:08:54 GMT+0500 (PKT)
Tue Aug 14 2012 08:08:54 GMT+0500 (PKT)
4

5 回答 5

19

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toLocaleString

基本上,它将日期格式化为调用该函数的计算机上的格式化方式,例如美国的前一天,世界其他大部分地区的前一天。

编辑:

因为其他一些人指出上述参考资料不一定可靠,所以这来自ECMAScript 规范

15.9.5.2 Date.prototype.toString ( )

此函数返回一个字符串值。String 的内容是 implementation->> 相关的,但旨在以方便、人类可读的形式表示当前时区中的 Date。

15.9.5.5 Date.prototype.toLocaleString ( )

此函数返回一个字符串值。String 的内容是 implementation->>dependent,但旨在以一种方便的、人类可读的形式表示当前时区中的 Date,该形式对应于宿主环境的当前语言环境的约定。

由于您可以希望假设大多数实现都会反映规范,因此不同之处在于toString()它只需要可读性,toLocaleString()应该以一种符合用户期望的格式可读,基于他们的语言环境。

于 2012-08-14T03:13:40.637 回答
5

使用操作系统的语言环境约定将日期转换为字符串。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toLocaleString

在转换操作系统格式不正确的年份时,toLocaleString 的行为类似于 toString。

于 2012-08-14T03:15:04.463 回答
2

我刚刚在 Chrome 的控制台中检查了日期,并发现了演示格式的差异。希望这会有所帮助。

var d = new Date();

console.log(d.toLocaleString()); //"04.09.2016, 15:42:44"
console.log(d.toString());       //"Sun Sep 04 2016 15:42:44 GMT+0300 (FLE Daylight Time)"
于 2016-09-04T12:46:01.250 回答
1

很多参考,但没有一个是权威的。请注意,Mozilla 的文档是针对 JavaScript 的,这是他们针对浏览器的 ECMAScript 版本。其他浏览器使用其他实现,因此,虽然 MDN 文档很有用,但它不具有权威性(它也是一个社区 wiki,因此甚至不是官方 Mozilla 文档)并且不一定适用于其他浏览器。

最终参考是 ECMAScript 语言规范,其中Date.prototype.toStringDate.prototype.toLocaleString的行为都以独立于浏览器的术语进行了解释。

值得注意的是对于这两种方法,字符串是依赖于实现的,这意味着不同的浏览器将返回不同的字符串。

于 2012-08-14T03:55:58.517 回答
0

只是补充。除了日期之外,它还转换/格式化普通变量。 这两个函数都用于将传递的参数格式化/转换为字符串,但参数的格式是要看的。

toLocalestring()用于根据调用函数的地理位置返回格式化字符串。

为了简单起见。举这个例子。它显示了toString() 如何不格式化变量,但toLocaleSting() 将根据地理位置的语言环境设置对其进行格式化。

let number = 1100;
console.log(number.toString()); // "1100"
console.log(number.toLocaleString())  // 1,100

let number = 1100;
console.log(number.toString());
console.log(number.toLocaleString());

这对程序员避免编写额外的函数来格式化字符串或日期有很大的帮助。toLocaleString() 会处理这个问题。

希望你会觉得它有些帮助和有趣。

于 2020-06-16T10:10:35.967 回答