在我的一个方法中,我曾经使用公差值检查dataSource中的值,如下所示
var xTolerance=3.14
for(var i=0;i<x.length;i++){
if(Math.abs(x[i])>xTolerance){
//code
}
}
其中x包含datasource的值。有时我从数据源获取日期(Tue Apr 1 00:00:00 PST 1930),因此在使用容差检查值之前,我已使用 Date.parse 将该日期转换为毫秒。数据源包含1000个点,因此执行时间因使用Date.parse方法而增加,所以我已经使用tolernace检查了值(Tue Apr 1 00:00:00 PST 1930)而没有转换为毫秒。它工作正常,我的问题是以下代码是否相同
x[i]=Tue Apr 1 00:00:00 PST 1930 x[i]=Tue Apr 1 00:00:00 PST 1930
<=> x[i]=Date.parse(x[i]);
if(Math.abs(x[i])>xTolerance){ if(Math.abs(x[i])>xTolerance){
} }
简单
x [i] = Tue Apr 1 00:00:00 PST 1930 ...我只想问是否
Math.abs(x[i])== Math.abs(Date.parse(x[i]))
是真的???
提前致谢
答案 0 :(得分:0)
不,他们不一样。
Math.abs('Tue Apr 1 00:00:00 PST 1930')
的值为NaN
。使用任何运算符将其与任何数字进行比较会得到false
,但提供!=
的运算符!==
和true
除外。
答案 1 :(得分:0)
我会比较Math.abs(x)
和Math.abs(Date.parse(x))
,假设x
是Date
个对象:
根据http://ecma262-5.com/ELS5_Section_15.htm#Section_15.8.2,
15.8.2数学对象的函数属性
以下每个Math对象函数都将 ToNumber 抽象运算符应用于每个函数 它的参数(如果有多个,则按从左到右的顺序) 然后对得到的Number值进行计算。
根据http://ecma262-5.com/ELS5_Section_9.htm#Section_9.3,如果参数是对象,ToNumber
将应用以下步骤:
- 让primValue为 ToPrimitive (输入参数,提示编号)。
- 返回ToNumber(primValue)。
醇>
根据http://ecma262-5.com/ELS5_Section_15.htm#Section_15.9.6,
(如果您需要完整的算法,请阅读http://ecma262-5.com/ELS5_Section_9.htm#Section_9.1和http://ecma262-5.com/ELS5_Section_8.htm#Section_8.12.8)
日期实例从Date原型对象继承属性 他们的[[Class]]内部属性值是“Date”。日期实例也 有一个[[PrimitiveValue]]内部属性。
[[PrimitiveValue]]内部属性是由表示的时间值 这个Date对象。
然后,Math.abs(x)
,其中x
是Date
对象,与Math.abs(y)
相同,其中y
y是包含时间值的数字由x
代表。
根据http://ecma262-5.com/ELS5_Section_15.htm#Section_15.9.4.2,
15.9.4.2 Date.parse(string)
parse函数将 ToString 运算符应用于其参数,并将生成的String解释为日期 和时间;它返回一个Number,对应的UTC时间值 日期和时间。字符串可以解释为本地时间,UTC 时间,或在某个其他时区的时间,取决于的内容 字符串。
根据http://ecma262-5.com/ELS5_Section_15.htm#ELS5_Section_15.9.5.2
15.9.5.2 Date.prototype.toString()
此函数返回String值。 String的内容依赖于实现,但是 用于表示当前时区中的日期 方便的,人类可读的形式。
请注意
对于任何日期值d ,其中 毫秒数量为零, Date.parse(d.toString())的结果是 等于d.valueOf()。见15.9.4.2。
根据http://ecma262-5.com/ELS5_Section_15.htm#Section_15.9.5.8,
15.9.5.8 Date.prototype.valueOf()
valueOf函数返回一个Number,此时间值。
然后,Math.abs(Date.parse(x))
,其中x
是Date
对象,与Math.abs(y)
相同,其中y
y是包含时间值的数字x
。
如果毫秒数为零,您可以确定它们是相等的。
如果没有,结果可能与实现有关,但我想在大多数实现中结果是相同的。
请注意,Date.parse
需要一个字符串,因此如果Date.parse(x)
已经是x
对象,则无需使用Date
。
如果您对规格有疑问,可以转到