所以我注意到
(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
一元运算+
符将实例强制转换为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的评估如下:
ToNumber
然后,在Object上生成ToPrimitive
带有提示编号的。ToPrimitive
然后将调用[[DefaultValue]]
内部方法,其中指出:
当使用提示编号调用O的[[DefaultValue]]内部方法时,将执行以下步骤:
- 令valueOf为使用参数“ valueOf”调用对象O的[[Get]]内部方法的结果。
- 如果IsCallable(valueOf)为true,则
- 令val为调用valueOf的[[Call]]内部方法的结果,其中O为this值,并且参数列表为空。
- 如果val是原始值,则返回val。
- 令toString为使用参数“ toString”调用对象O的[[Get]]内部方法的结果。
- 如果IsCallable(toString)为true,
- 令str为调用toString的[[Call]]内部方法的结果,其中O为this值,并且参数列表为空。
- 如果str是原始值,则返回str。
- 引发TypeError异常。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句