[英]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。
15.8.2.11 max([value1 [,value2 [,…]]])
- 给定零个或多个参数,请对每个参数调用ToNumber并返回最大的结果值。
- 如果未提供任何参数,则结果为-∞。
- 如果任何值为NaN,则结果为NaN。
- 按照11.8.5的方法进行值比较以确定最大值,只是认为+0大于-0。
- max方法的length属性为2。
20.2.2.24 Math.max(value1,value2,…values)
- 给定零个或多个参数,请对每个参数调用ToNumber并返回最大的结果值。
- 如果未提供任何参数,则结果为-∞。
- 如果任何值为NaN,则结果为NaN。
- 使用抽象关系比较算法(7.2.11)完成值的比较以确定最大值,不同之处在于+0被认为大于-0。
- max方法的length属性为2。
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.