如果我在之前添加+而不是之后添加+,字符串(例如" 123")如何转换为数字?

时间:2017-01-05 10:30:33

标签: javascript

当我在+"123"等引号中的数字之前添加+时,它会转换为typeof number,但如果我添加"123"+,则会等待下一个操作数。为什么?为什么在第一种情况下它会转换为数字?

4 个答案:

答案 0 :(得分:8)

在第一种情况下,您使用Unary plus +

  

一元加号运算符在其操作数之前,并计算其操作数,但尝试将其转换为数字(如果尚未)。虽然一元否定( - )也可以转换非数字,但是一元加号是将某些东西转换为数字的最快和首选方式,因为它不会对数字执行任何其他操作。它可以转换整数和浮点数的字符串表示形式,以及非字符串值truefalsenull。支持十进制和十六进制(“0x” - 前缀)格式的整数。支持负数(但不支持十六进制)。如果它无法解析特定值,则会评估为NaN

在第二个中你只使用Addition

  

加法运算符产生数字操作数或字符串连接的总和。

答案 1 :(得分:1)

由于您有+-个符号(作为一元运算符),因此前面的数字只会不附加。以同样的方式,当您向字符串添加一些+-时,同样适用,如果能够转换为数字,它们将转换为数字。但是当你追加它时,它被视为二元运算符。所以,连接。

答案 2 :(得分:1)

+"123"可以解析为unary + operator后跟字符串123。正如您在规范中看到的那样,一元+运算符的工作特别是将其操作数转换为数字类型。

"123"+无法解析为有效的JS表达式,因为+标记后面应始终跟一个操作数,无论是将其解析为一元+运算符还是二元+加法运算符。

答案 3 :(得分:0)

您可以通过阅读本文https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators

来理解它
  

一元运算符。尝试将操作数转换为数字(如果是)   没有读过