Javascript 为什么我可以直接减去两个日期对象?

Javascript 为什么我可以直接减去两个日期对象?,javascript,Javascript,我一直在想。显然,如果我这样做的话 const a = new Date(); ,将保留对日期实例的引用。它有方法等等。那么,为什么我可以用简单的-运算符减去两个日期呢 const a = new Date(); const b = new Date(); console.log(a - b); 我不是在这里减去两个物体吗?Date是否以某种方式“扩展”了数字?我能自己定义这些操作符对我自己的类做什么吗?类似于C如何使用操作符重载吗?两个日期之间的差值,以毫秒为单位 const a=新日期

我一直在想。显然,如果我这样做的话

const a = new Date();
,将保留对日期实例的引用。它有方法等等。那么,为什么我可以用简单的-运算符减去两个日期呢

const a = new Date();
const b = new Date();
console.log(a - b);

我不是在这里减去两个物体吗?Date是否以某种方式“扩展”了数字?我能自己定义这些操作符对我自己的类做什么吗?类似于C如何使用操作符重载吗?

两个日期之间的差值,以毫秒为单位

const a=新日期();
console.log(a.getTime());//1527942328972
console.log(Math.abs(a));//1527942328972
常数b=新日期(“2018/02/01”);
const diff=Math.abs(a-b);
常量diff1=a.getTime()-b.getTime();
console.log(diff);//10509974822
console.log(diff1);//10509974822
这是因为

它不仅适用于
日期
对象。您也可以在对象中使用
valueOf

const a={}
a、 valueOf=()=>100

log(a+1)//101
您可以以毫秒为单位获得差值

var a = new Date();
var b = new Date();
var diff = Math.abs(a.getTime() - b.getTime());
console.log(diff);

你可以从两个日期得到天数的差值

var a = new Date();
var b = new Date( "2018/5/01" );
var timeDiff = Math.abs(a.getTime() - b.getTime());
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
console.log(diffDays);

-
使用
valueOf
:-参见@Caramiriel Oh。我怎么会错过呢?@DavidsKanal,因为Math.abs返回一个数字的绝对值(但首先它会在计算结果之前转换它们)