JavaScript中的+运算符

根特的加文

所以我注意到

(new Date())

是一个Date对象;在这种情况下

Date {Thu Dec 04 2014 22:43:07 GMT+0200 (SAST)}

但是如果我输入

+(new Date())

我得到一个int值;

1417725787989

怎么做?

我有一个称为“持续时间”的函数,该函数在像这样使用时:

new Duration(352510921)

返回如下所示的实例:

{ days:5, hours:3, mins:55, secs:10, ms:921 }    

那么,如何使用+运算符获取Duration实例的int值?

var dur = new Duration(352510921);
console.log(+dur) // prints int value 352510921
zzzzBov

一元运算+符将实例强制转换为Number,与调用Number()函数会将变量强制转换为的方式相同Number

如果要覆盖特定实例的投射方式,则需要覆盖该valueOf实例属性:

var a = {
    valueOf: function () {
        return 5;
    }
};
console.log(a); //Object { valueOf: function () {...} }
console.log(+a); //5

根据ES5标准

11.4.6一元+运算符#Ⓡ

一元+运算符将其操作数转换为Number类型。

产生UnaryExpression:+ UnaryExpression的评估如下:

  1. 令expr为评估UnaryExpression的结果。
  2. 返回ToNumberGetValue(expr))。

ToNumber然后,在Object上生成ToPrimitive带有提示编号的。ToPrimitive然后将调用[[DefaultValue]]内部方法,其中指出:

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

  1. 令valueOf为使用参数“ valueOf”调用对象O的[[Get]]内部方法的结果。
  2. 如果IsCallable(valueOf)为true,则
    1. 令val为调用valueOf的[[Call]]内部方法的结果,其中O为this值,并且参数列表为空。
    2. 如果val是原始值,则返回val。
  3. 令toString为使用参数“ toString”调用对象O的[[Get]]内部方法的结果。
  4. 如果IsCallable(toString)为true,
    1. 令str为调用toString的[[Call]]内部方法的结果,其中O为this值,并且参数列表为空。
    2. 如果str是原始值,则返回str。
  5. 引发TypeError异常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章