Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 请解释原因和方式+;新日期();作为';解决办法';用于IE8或更低版本中的Date.now()_Javascript - Fatal编程技术网

Javascript 请解释原因和方式+;新日期();作为';解决办法';用于IE8或更低版本中的Date.now()

Javascript 请解释原因和方式+;新日期();作为';解决办法';用于IE8或更低版本中的Date.now(),javascript,Javascript,(我正在阅读《面向Web开发人员的专业JavaScript》一书,以提供有关此问题的上下文,特别是关于引用类型的第5章) 我想知道为什么,怎么做 var start=+新日期()用于获取now的当前毫秒表示形式,作为不支持ECMAScript 5的Date.now()的浏览器(例如IE8)的变通方法 与同样获取当前日期和时间的普通旧的new Date()操作符相比,+操作符在这里做了什么?发生的事情是,首先创建一个新的日期对象,然后将其强制转换为一个数字 TL;DR版本 在后台,运行时调用对象的

(我正在阅读《面向Web开发人员的专业JavaScript》一书,以提供有关此问题的上下文,特别是关于引用类型的第5章)

我想知道为什么,怎么做
var start=+新日期()
用于获取now的当前毫秒表示形式,作为不支持ECMAScript 5的
Date.now()
的浏览器(例如IE8)的变通方法


与同样获取当前日期和时间的普通旧的
new Date()
操作符相比,
+
操作符在这里做了什么?

发生的事情是,首先创建一个新的日期对象,然后将其强制转换为一个数字

TL;DR版本 在后台,运行时调用对象的方法

详细版本 返回一个新对象

使用

一元+运算符使用
d
调用内部函数

接受输入参数,如果参数类型为
对象
(日期为),则使用输入和提示号调用内部参数

接受输入参数和可选参数PreferredType

如果输入类型为Object,则说明:

返回对象的默认值。对象的默认值 通过调用 对象,传递可选提示PreferredType。政府的行为 本规范对内部方法进行了定义 8.12.8中的所有本机ECMAScript对象

使用提示调用O的[[DefaultValue]]内部方法时 编号时,将采取以下步骤:

  • 让valueOf作为调用对象O的[[Get]]内部方法(参数为“valueOf”)的结果
  • 如果IsCallable(valueOf)为真,
  • 让val作为调用valueOf的[[Call]]内部方法的结果,其中O作为this值和一个空参数列表
  • 如果val是基本值,则返回val
  • 在代码中,这大致转化为:

    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调用它自己,这次是用as
    primValue
    返回的
    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个字符