当我创建变量时,我不会在等号后使用括号。
为什么此代码在等号后使用括号?有谁能解释一下?我想知道等号后的含义是什么。
var start = (new Date).valueOf(),
答案 0 :(得分:2)
围绕new Date
的约束导致首先评估,因此创建日期,然后在新创建的日期调用valueOf
。
这基本上就像在做
var d = new Date();
var start = d.valueOf();
但在一条线上。
但是,它应该是(new Date()).valueOf()
。现在有什么错误。
答案 1 :(得分:2)
这样做的目的是缩短以下代码:
var date = new Date();
var start = date.valueOf();
但你不能写:
var start = new Date().valueOf();
因为没有Date().valueOf()
可以用作构造函数,所以你必须添加大括号。大括号中的部分将首先执行(创建一个新的日期),并且将在大括号中的代码结果上调用valueOf()
(在构造的日期读取:)。也就是说,解决方案就是我们在你的问题中得到的:
var start = (new Date).valueOf();
所有这一切的结果都是以毫秒为单位的时间戳。
答案 2 :(得分:1)
简单的事情。 new Date
返回日期。没有括号,它将是new Date.valueOf()
。由于Date
没有方法valueOf()
,因此会导致错误。
但是,Date的一个实例具有此功能。所以我们使用括号。 (new Date).valueOf()
与
var start = new Date;
start.valueOf();
答案 3 :(得分:1)
此方法返回Date对象的等效值,以毫秒为单位。
毫秒表示为一个整数,表示1970年1月1日午夜(GMT)与Date对象中指定的日期和时间之间的毫秒数。
答案 4 :(得分:1)
围绕new Date
的包装parens评估调用以创建Date对象,然后调用日期对象的方法 - > valueOf
。一个更容易理解的例子是
(3 + 2) + 2; // = 7 - evaluates 5 then adds 2
valueOf
方法定义为:
返回Date对象的原始值。覆盖Object.prototype.valueOf方法。
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date
你实际上可以通过
实现同样的目标var start = +(new Date())
// returns the integer value of the date (in milliseconds)
// aka the primitive value