+;JavaScript中日期的运算符
加号运算符(“+”)似乎对javascript中的日期类型对象具有多个函数。以下输入为+t提供了不同的输出:+;JavaScript中日期的运算符,javascript,Javascript,加号运算符(“+”)似乎对javascript中的日期类型对象具有多个函数。以下输入为+t提供了不同的输出: var t = new Date(); console.log('the date is '+t); console.log(+t); 更让我困惑的是,在这里它没有转换成millseconds: console.log(t+5); 特别是: console.log(5+t); 自: console.log(+t+5); 我很惊讶它将五视为字符串,“+t”在+t+5和t+5之间的语
var t = new Date();
console.log('the date is '+t);
console.log(+t);
更让我困惑的是,在这里它没有转换成millseconds:
console.log(t+5);
特别是:
console.log(5+t);
自:
console.log(+t+5);
我很惊讶它将五视为字符串,“+t”在+t+5和t+5之间的语义不同
是否有一个参考,我可以找到哪些运算符对日期对象有什么影响?这样,我就可以确信,+的多种行为在每个浏览器中都是相同的
快速小提琴:
+new Date()
与编号(new Date())相同。它只是使用类型转换转换为数字。+new Date()
与number(new Date())
相同。它只是使用类型转换转换为一个数字。这里有一个关于+
(加法运算符)的重要注意事项:
调用ToPrimitive[当类型强制对象时]时,没有提供任何提示。除Date对象外的所有本机ECMAScript对象都会处理没有提示的情况,就像给出了提示编号一样Date对象处理没有提示的情况,就像给出提示字符串一样。
这就是当您尝试计算newdate()+5
表达式时发生的情况。左操作数应该成为字符串,而不是数字,并且调用的是toString
,而不是valueOf
相反,这
+新日期()+5
。。。显式地将左操作数的类型设置为Number(通过调用valueOf
方法,对于Date,该方法返回毫秒值)。这是在计算二进制加运算之前完成的,因为一元加运算的优先级更高
作为旁注,
+
操作中的操作数顺序在JS中并不重要:t+5
和5+t
是等价的。如果t
是字符串(或强制为字符串的类型),+
将被视为串联运算符,而不是加法运算符 这里有一个关于中的+
(加法运算符)的重要注意事项:
调用ToPrimitive[当类型强制对象时]时,没有提供任何提示。除Date对象外的所有本机ECMAScript对象都会处理没有提示的情况,就像给出了提示编号一样Date对象处理没有提示的情况,就像给出提示字符串一样。
这就是当您尝试计算newdate()+5
表达式时发生的情况。左操作数应该成为字符串,而不是数字,并且调用的是toString
,而不是valueOf
相反,这
+新日期()+5
。。。显式地将左操作数的类型设置为Number(通过调用valueOf
方法,对于Date,该方法返回毫秒值)。这是在计算二进制加运算之前完成的,因为一元加优先级更高
作为旁注,
+
操作中的操作数顺序在JS中并不重要:t+5
和5+t
是等价的。如果t
是字符串(或强制为字符串的类型),+
将被视为串联运算符,而不是加法运算符 一元“+”运算符(+x)只是将表达式转换为数字的一种方法。所有其他组合都是隐式数字或字符串转换。日期的“+”运算符没有特殊重载
关于Javascript操作符的工作原理,最接近完整参考的是ECMAScript标准:
对于不太复杂的概述,您可能需要查看Mozilla参考:
一元“+”运算符(+x)只是将表达式转换为数字的一种方法。所有其他组合都是隐式数字或字符串转换。日期的“+”运算符没有特殊重载
关于Javascript操作符的工作原理,最接近完整参考的是ECMAScript标准:
对于不太复杂的概述,您可能需要查看Mozilla参考:
不,在本例中它不会将字符串转换为数字。不,在本例中它不会将字符串转换为数字。很有趣。但为什么(5+t)不被视为日期被强制为数字的提示呢?因为否则,
+
操作将变得不可交换——这被认为是处理弱类型时更大的罪恶。所以我猜是5+(+t)!谢谢现在确实有道理了。我将坚持使用Number()而不是一元数+。是的,5++t将被这样对待。但是,5++t
将导致语法错误(无效的增量运算符
)。触摸++,哈哈。很有趣。但为什么(5+t)不被视为日期被强制为数字的提示呢?因为否则,+
操作将变得不可交换——这被认为是处理弱类型时更大的罪恶。所以我猜是5+(+t)!谢谢现在确实有道理了。我将坚持使用Number()而不是一元数+。是的,5++t将被这样对待。但是,5++t
将导致语法错误(无效的增量运算符
)。触摸++,哈哈。