JavaScript中的日期与新日期
JavaScript中的日期与新日期,javascript,Javascript,new Date()接受序号并返回Date对象。 Date()有什么作用,为什么它给出了不同的时间 >>> new Date(1329429600000) Date {Fri Feb 17 2012 00:00:00 GMT+0200 (القدس Standard Time)} >>> Date(1329429600000) "Tue Mar 06 2012 15:29:58 GMT+0200 (Jerusalem Standard Time)" new
new Date()
接受序号并返回Date
对象。Date()
有什么作用,为什么它给出了不同的时间
>>> new Date(1329429600000)
Date {Fri Feb 17 2012 00:00:00 GMT+0200 (القدس Standard Time)}
>>> Date(1329429600000)
"Tue Mar 06 2012 15:29:58 GMT+0200 (Jerusalem Standard Time)"
new Date
创建一个新的日期对象,您可以使用不同的日期修改或初始化该对象,而Date
返回当前日期/时间的字符串,忽略其参数。来自:
当Date
作为函数而不是构造函数调用时,它返回一个表示当前时间(UTC)的字符串
以及:
当Date
作为new
表达式的一部分被调用时,它是一个构造函数:它初始化新创建的对象
因此,
new Date(…)
返回一个对象,使得obj instanceof Date
为true,而Date(…)
基本上返回与new Date()相同的值。toString()
new Date()
基于输入参数和Date()返回日期
在浏览器上返回今天的日期。日期用于创建表示日期/时间的对象。它不应该像函数一样被调用。您可以在这里获得更多信息:查看API快速参考和代码测试平台。您可以看到在不使用new
的情况下调用的Date()
函数不接受任何参数,并且总是返回当前日期/时间的字符串表示形式。如果将样本修改为:
console.log(Date());
console.log(Date(1329429600000));
您会发现两者的结果相同(因为JavaScript忽略传递给函数的额外参数):
将构造函数作为函数调用是完全错误的,它会(可能)对你的应用程序范围产生意想不到的影响,不久你就会成为一个组错误修复会话中的焦点
按照规范设计者的意图创建一个日期对象,不要对那些认为JS程序员愚蠢的工程师作为保护措施实现的变通方法进行编码。(在实验室工作,在谈话过程中坐在旁边的椅子上,处理了它,然后继续前进)
如果您非常反对新的,您可以尝试object.create,但在编写时速度较慢,除非您计划实现多态继承,否则这是额外的努力,回报较少。Date
类可以称为构造函数或方法来拥有内置代码,如:
function Date(args){
if (this.constructor == Date){
// if you call : new Date(args)
}else{
// if you call as method : Date()
return new Date()
}
}
因此,如果您像方法一样调用它,它将重新调用构造函数以返回当前日期和时间 现在是2017年,我心里也有同样的问题。读了一些书后,我找到了一个答案:
执行显式类型转换的最简单方法是使用Boolean()、Number()、String()或Object()函数。我们已经将这些函数视为包装器对象的构造函数。但是,在没有新运算符的情况下调用时,它们将作为转换函数并执行类型转换
核心JavaScript的内置类
toString()转换之前的valueOf()转换,日期类除外,
它执行toString()转换。“
因此,在不使用new关键字的情况下调用Date()将执行类型转换。由于Date是一个对象,并且应该是原语的对象,Date对象在默认情况下调用toString()(尽管Date也有有意义的valueOf()方法)
在《JavaScript:权威指南》一书中发现了这一点。把它留给刚刚开始学习JS:)的子孙后代。有没有关于Date()函数如何实现的伪代码,以便它可以作为构造函数和常规函数使用?thanks@Benny请注意以下几点:function Test(){var private=“private value”;this.public=“public value”;return“return value”}
调用new Test()
创建一个包含私有和公共值的对象。调用Test()
返回一个字符串。@Benny下面是它的实现方式:函数日期(/*…*/){if(!(this instanceof Date)){return new Date().toString();}否则{/*我们得到了
新的,构造函数逻辑*/}
很有趣,但请注意日期类型()=='string'
,而不是'object'
。
function Date(args){
if (this.constructor == Date){
// if you call : new Date(args)
}else{
// if you call as method : Date()
return new Date()
}
}