Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
+;JavaScript中日期的运算符_Javascript - Fatal编程技术网

+;JavaScript中日期的运算符

+;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之间的语

加号运算符(“+”)似乎对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之间的语义不同

是否有一个参考,我可以找到哪些运算符对日期对象有什么影响?这样,我就可以确信,+的多种行为在每个浏览器中都是相同的


快速小提琴:

+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
将导致语法错误(
无效的增量运算符
)。触摸++,哈哈。