繁体   English   中英

使用Math.max()计算最大JavaScript日期对象文档

[英]Using Math.max() to Calculate Max JavaScript Date Object Documentation

我不确定100%为什么可以使用Math.max()函数从多个Date对象计算最大日期。 我的IDE PhpStorm一直给我以下错误:

参数类型日期不能分配给参数类型编号

如我的代码片段所示,它可以分配给参数:

 /* Variable Defaults */ var dateOne = new Date(); var dateTwo = new Date('2017-01-21'); var dateThree = new Date('11/16/2016'); var dateMax = Math.max(dateOne, dateTwo, dateThree); /* Console Data */ console.log('dateOne', dateOne); console.log('dateTwo', dateTwo); console.log('dateThree', dateThree); console.log('dateMax', dateMax + ': ' + new Date(dateMax)); 

我决定研究一下规范,看看我的IDE是否使用的是较旧的标准,但是我的研究未能满足我的教育自己的意愿,为什么这种方法应该首先起作用:

ECMAScript 1st Edition(ECMA-262)

15.8.2.11 max(x,y)

  • 返回两个参数中较大的一个。
  • 如果任一自变量为NaN,则结果为NaN。
  • 如果x> y,则结果为x。
  • 如果y> x,则结果为y。
  • 如果x为+ 0,y为+0,则结果为+0。
  • 如果x为+ 0,y为-0,则结果为+0。
  • 如果x为-0,y为+0,则结果为+0。
  • 如果x为-0,y为-0,则结果为-0。

ECMAScript 5.1(ECMA-262)

15.8.2.11 max([value1 [,value2 [,…]]])

  • 给定零个或多个参数,请对每个参数调用ToNumber并返回最大的结果值。
  • 如果未提供任何参数,则结果为-∞。
  • 如果任何值为NaN,则结果为NaN。
  • 按照11.8.5的方法进行值比较以确定最大值,只是认为+0大于-0。
  • max方法的length属性为2。

ECMAScript 2015(第6版,ECMA-262)

20.2.2.24 Math.max(value1,value2,…values)

  • 给定零个或多个参数,请对每个参数调用ToNumber并返回最大的结果值。
  • 如果未提供任何参数,则结果为-∞。
  • 如果任何值为NaN,则结果为NaN。
  • 使用抽象关系比较算法(7.2.11)完成值的比较以确定最大值,不同之处在于+0被认为大于-0。
  • max方法的length属性为2。

ECMAScript最新草案(ECMA-262)

20.2.2.24 Math.max(value1,value2,... values)

  • 给定零个或多个参数,请对每个参数调用ToNumber并返回最大的结果值。
  • 如果未提供任何参数,则结果为-∞。
  • 如果任何值为NaN,则结果为NaN。
  • 使用抽象关系比较算法对值进行比较以确定最大值,不同之处在于+0被认为大于-0。

我已经在所有现代浏览器中测试了此方法,并且没有产生任何错误。 虽然我确实想知道这是否与旧版浏览器兼容。

为什么在规范明确指出不应通过Math.max()传递Date对象的情况下起作用?

由于有效的Date()不是NaN ,因此可以使用Number()函数, +一元运算符或valueOf()函数将其转换为数字:

 var date = new Date(); console.log(isNaN(date) + ',' + Number(date)); console.log(isNaN(date) + ',' + +date); console.log(isNaN(date) + ',' + date.valueOf()); console.log(isNaN(2) + ',' + Number(2)); console.log(isNaN('2') + ',' + Number('2')); console.log(isNaN('xx') + ',' + Number('xx')); console.log(isNaN(['a']) + ',' + Number(['a'])); console.log(isNaN({}) + ',' + Number({})); 

NaN是数字类型的特殊值,而不是“不是数字的所有内容”。 它由函数使用,当函数失败时应返回数字,例如调用Math.sqrt(-1)

此外,如果一个函数需要一个数字,JavaScript会尽其所能,无论您给它多少,都应做一个数字。 并且由于Date具有数字表示形式(可以使用Date.valueOf获得),因此它将使用该数字表示形式。

isNaN说一句,您可以使用isNaN函数测试值是否为NaN ,但是将其与NaN直接比较将返回false 。这只是这些JavaScript之一)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM