Javascript 请解释原因和方式+;新日期();作为';解决办法';用于IE8或更低版本中的Date.now()
(我正在阅读《面向Web开发人员的专业JavaScript》一书,以提供有关此问题的上下文,特别是关于引用类型的第5章) 我想知道为什么,怎么做Javascript 请解释原因和方式+;新日期();作为';解决办法';用于IE8或更低版本中的Date.now(),javascript,Javascript,(我正在阅读《面向Web开发人员的专业JavaScript》一书,以提供有关此问题的上下文,特别是关于引用类型的第5章) 我想知道为什么,怎么做 var start=+新日期()用于获取now的当前毫秒表示形式,作为不支持ECMAScript 5的Date.now()的浏览器(例如IE8)的变通方法 与同样获取当前日期和时间的普通旧的new Date()操作符相比,+操作符在这里做了什么?发生的事情是,首先创建一个新的日期对象,然后将其强制转换为一个数字 TL;DR版本 在后台,运行时调用对象的
var start=+新日期()
用于获取now的当前毫秒表示形式,作为不支持ECMAScript 5的Date.now()
的浏览器(例如IE8)的变通方法
与同样获取当前日期和时间的普通旧的
new Date()
操作符相比,+
操作符在这里做了什么?发生的事情是,首先创建一个新的日期对象,然后将其强制转换为一个数字
TL;DR版本
在后台,运行时调用对象的方法
详细版本
返回一个新对象
使用
一元+运算符使用d
调用内部函数
接受输入参数,如果参数类型为对象
(日期为),则使用输入和提示号调用内部参数
接受输入参数和可选参数PreferredType
如果输入类型为Object,则说明:
返回对象的默认值。对象的默认值
通过调用
对象,传递可选提示PreferredType。政府的行为
本规范对内部方法进行了定义
8.12.8中的所有本机ECMAScript对象
使用提示调用O的[[DefaultValue]]内部方法时
编号时,将采取以下步骤:
var val,
type,
valueOf = O.Get( 'valueOf' );
if ( typeof valueOf === 'function' ) {
val = valueOf.call( O );
type = typeof val;
if ( val == null || type === 'boolean' || type === 'number' || type === 'string' ) {
return val;
}
}
[[Get]]
t带有参数“valueOf”的O的内部方法基本上意味着返回
valueOf
函数返回一个数字,该数字为
如果我们现在返回到,我们会看到ToNumber调用它自己,这次是用asprimValue
返回的val
。如果参数类型为Number,则表示:
结果等于输入参数(无转换)
结尾一元+
将值转换为数字。例如,+“123”
将字符串“123”
转换为数字123
。这也适用于日期,转换为数字的日期表示毫秒数。date.now()函数用于IE:
return a number of milliseconds between midnight, January 1, 1970, and the current date and time.
if (typeof Date.now() === 'undefined') {
Date.now = function () {
return new Date();
}
}
var currentDateTime = +new Date();
要求
Not supported in installed versions earlier than Internet Explorer 9. However, it is supported in the following document modes: Quirks, Internet Explorer 6 standards, Internet Explorer 7 standards, Internet Explorer 8 standards, Internet Explorer 9 standards, Internet Explorer 10 standards. Also supported in Windows Store apps.
对于在IE8上获取当前日期对象,可以使用以下命令:
return a number of milliseconds between midnight, January 1, 1970, and the current date and time.
if (typeof Date.now() === 'undefined') {
Date.now = function () {
return new Date();
}
}
var currentDateTime = +new Date();
对于日期对象中的获取时间值(自1970年1月1日午夜以来的毫秒数)。在IE8上,您可以使用以下命令:
return a number of milliseconds between midnight, January 1, 1970, and the current date and time.
if (typeof Date.now() === 'undefined') {
Date.now = function () {
return new Date();
}
}
var currentDateTime = +new Date();
+1为了连接到
valueOf
,它提醒您可以模拟这种行为。因此基本上,+
调用对象的valueOf()
,因为它试图将其转换为数字?“Secret valueOf()”解锁@安迪E:你分享的链接很棒=)这个答案实际上会在IE8和之前的版本中引起问题,比如Date。现在是未定义的,所以尝试调用它作为Date.now()
会导致错误。但是,这样做很容易:if(typeof Date.now=='undefined'){Date.now=function(){return+new Date();}}
Echoing@BrianArnoldSinclair-在typeof
检查中调用Date.now()
会导致错误。我试图编辑帖子,将其更正为日期类型。现在,我检查函数,而不是结果,但不允许编辑长度小于6个字符