什么是1 *新日期()?

时间:2016-03-17 09:35:55

标签: javascript date type-conversion

通过jQuery源代码阅读,我遇到了以下代码:

1 * new Date()

Google搜索后,我也看到它已包含在Google Analytics代码段中。

任何人都可以解释这里发生的事情,以及这条线的目的吗? 它是否生成一个不会再重复的随机数?

3 个答案:

答案 0 :(得分:9)

new Date()将返回Date()个对象。当强制转换为字符串时,对象返回日期的ISO格式字符串解释:

console.log(new Date()); // = 'Thu Mar 17 2016 09:37:12 GMT+0000 (GMT)'

当强制转换为整数时,它将返回该日期的纪元时间戳:

console.log(1 * new Date()); // = 1458207432249

以下是显示两种结果的示例:

var d1 = new Date();
var d2 = 1 * new Date();

console.log(d1);
console.log(d2);

请注意,对int的强制返回与Date.now()相同的值,但是{8}在IE8及更早版本中不可用。

答案 1 :(得分:2)

您引用的代码部分是:

expando = "sizzle" + 1 * new Date(),
  

是否要生成一个不会再重复的随机数?

与那些不会在主机上重现的那个相比,并不是那么随机(尽管可能会将时钟重置为更早的日期,或者代码在下一个时钟周期之前再次运行,这可能是1到15毫秒之后)

如其他答案中所述,它等同于+new Date()new Date().getTime()

然而...

还有另一种用途,用于复制日期。在ECMAScript 2015之前,给出:

new Date(value)

如果 value 是一个Date对象,则调用其 toString 方法(通过调用ES5 §15.9.3.2,参见ToPrimitive) Date对象调用 toString ,参见§8.12.8底部的注释),它生成一个依赖于实现的字符串。解析它以生成新日期。这在某些浏览器中有一个怪癖,其中真正有两位数年份的日期被转换为20世纪的日期(例如,5月21日的日期,71将于1971年5月21日)。

使用现代公历来表示这些日期并不是一个好主意,所以它很可能不会打扰太多人。这已在ECMAScript 2015中修复,因此 value 是一个Date,它首先转换为Number,返回time value(参见§20.3.2.2 #3)。< / p>

当然,它仅在符合ECMAScript 2015规范的浏览器中修复。

Firefox似乎仍然存在于过去。使用new Date(date)复制日期会丢失毫秒,因此它可能仍然使用 toString 而不包括毫秒(大多数浏览器不会)。所以(在Firefox版本43.04中,显然是fixed in version 44),在下面使用new Date(date)进行复制会返回 false ,但在ECMAScript 2015兼容浏览器中(几乎任何其他浏览器都更现代比IE 8)它返回 true

&#13;
&#13;
var x = new Date();
var y = new Date(x);
var z = new Date(+x);

document.write('Copy using <code>new Date(date)</code> keeps milliseconds: ' + (x.getTime() == y.getTime()));
document.write('<br>Copy using<code>new Date(+date)</code> keeps milliseconds: ' + (x.getTime() == z.getTime()));
&#13;
&#13;
&#13;

答案 2 :(得分:1)

是整数转换的日期:

var date = new Date();
//conversion by + sign (without white space)
console.log(+date); //123454545645645645

//conversion by multiply 1 
console.log(1*date); //123454545645645645

//get int value without conversion
console.log(date.getTime()); //123454545645645645
console.log(Date.now()); //123454545645645645