这适用于Chrome:
var dateArray = [2012, 6, 5];
var dateObject = new Date(dateArray);
Run Code Online (Sandbox Code Playgroud)
我得到2012年6月5日.我也试过Android浏览器,我得到了相同的结果.但是,这在Firefox或Safari中不起作用.我可以说:
var dateObject = new Date(2012, 6, 5);
Run Code Online (Sandbox Code Playgroud)
但这应该是2012年7月5日,它应该是,而且也是我用Chrome获得的.
我的问题:是ECMA标准的第一个示例部分吗?仅仅是Chrome更具优势,我希望其他浏览器能在未来支持它吗?或者它只是一些v8-ism,我应该避免可移植性?
我一直试图找到这个特定形式的Date构造函数的引用,但无法得到任何.
Jam*_*ice 20
ES5规范详细说明了构造函数的new Date(value)形式Date.在处理此表单的算法中,value通过调用对象的[[DefaultValue]]内部方法将其转换为原始值.
将数组转换为原始值基本上是通过将数组转换为字符串来完成的.将数组转换为字符串(Array.prototype.toString)实际上与调用相同dateArray.join().
因此,您对Date构造函数的调用将实际上如下所示:
var dateObject = new Date("2012,6,5");
Run Code Online (Sandbox Code Playgroud)
如果Date.parse方法可以识别字符串,则最终会得到一个Date实例.
在这种形式的Date构造也列在MDN作为new Date(dateString).
传递数组时Firefox似乎失败,但如果传递该数组的字符串表示形式,则会成功.我会说这可能是一个Firefox错误,但我可能会误解ES5规范.
您可以在ES6中使用扩展语法。
let dateArray = [2012, 6, 5];
let dateObject = new Date(...dateArray);
console.log('Spread:', dateObject);
console.log('Direct:', new Date(2012, 6, 5));Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8092 次 |
| 最近记录: |