Date.parse和Math.abs是否相等

时间:2013-11-13 01:16:49

标签: javascript

在我的一个方法中,我曾经使用公差值检查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]))

是真的???

提前致谢

2 个答案:

答案 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)),假设xDate个对象:

Math.abs(x)的

根据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将应用以下步骤:

  
      
  1. 让primValue为 ToPrimitive (输入参数,提示编号)。
  2.   
  3. 返回ToNumber(primValue)。
  4.   

根据http://ecma262-5.com/ELS5_Section_15.htm#Section_15.9.6

(如果您需要完整的算法,请阅读http://ecma262-5.com/ELS5_Section_9.htm#Section_9.1http://ecma262-5.com/ELS5_Section_8.htm#Section_8.12.8

  

日期实例从Date原型对象继承属性   他们的[[Class]]内部属性值是“Date”。日期实例也   有一个[[PrimitiveValue]]内部属性。

     

[[PrimitiveValue]]内部属性是由表示的时间值   这个Date对象

然后,Math.abs(x),其中xDate对象,与Math.abs(y)相同,其中y y是包含时间值的数字由x代表。

Math.abs(Date.parse(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)),其中xDate对象,与Math.abs(y)相同,其中y y是包含时间值的数字x

结论

如果毫秒数为零,您可以确定它们是相等的。

如果没有,结果可能与实现有关,但我想在大多数实现中结果是相同的。

附加说明

请注意,Date.parse需要一个字符串,因此如果Date.parse(x)已经是x对象,则无需使用Date

如果您对规格有疑问,可以转到