2012-01-19 73 views
1

当我创建变量时,在等号后不使用括号。这个javascript变量是什么意思?

为什么此代码在等号后使用括号?任何人都可以解释吗?我想知道在等号后什么意思。

var start = (new Date).valueOf(), 

回答

1

此方法返回以毫秒为单位的日期对象的等价性。

毫秒表示为一个整数,表示1970年1月1日午夜(GMT)到Date对象中指定的日期和时间之间的毫秒数。

+0

同样的事情,你的意思的valueOf()函数自动转换Date对象到毫秒? – dgwkgg

2

的paranthesis各地new Date原因是先计算的,所以日期被创建,然后调用新创建的日期valueOf

这基本上就像做

var d = new Date(); 
var start = d.valueOf(); 

但在一行。

但是,它应该是(new Date()).valueOf()。现在有什么是错误的。

1

简单的事情。 new Date返回一个日期。没有括号,它将是new Date.valueOf()。由于Date没有方法valueOf(),因此会导致错误。

但是,Date的一个实例有这个功能。所以我们使用括号。 (new Date).valueOf()相同

var start = new Date; 
start.valueOf(); 
2

的这个意图是缩短了下面的代码:

var date = new Date(); 
var start = date.valueOf(); 

,但你不能写:

var start = new Date().valueOf(); 

,因为世界上没有Date().valueOf(),可以用来作为构造,所以你”将不得不添加大括号。大括号中的部分将首先执行(创建一个新的日期),并且valueOf()将被调用大括号中的代码结果(读取:在构建日期)。这就是说,该解决方案是我们在你的问题有:

var start = (new Date).valueOf(); 

这一切的结果是毫秒时间戳。

1

new Date周围的包装物将评估创建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