当我在+"123"
等引号中的数字之前添加+时,它会转换为typeof number
,但如果我添加"123"+
,则会等待下一个操作数。为什么?为什么在第一种情况下它会转换为数字?
答案 0 :(得分:8)
在第一种情况下,您使用Unary plus +
一元加号运算符在其操作数之前,并计算其操作数,但尝试将其转换为数字(如果尚未)。虽然一元否定( - )也可以转换非数字,但是一元加号是将某些东西转换为数字的最快和首选方式,因为它不会对数字执行任何其他操作。它可以转换整数和浮点数的字符串表示形式,以及非字符串值
true
,false
和null
。支持十进制和十六进制(“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
一元运算符。尝试将操作数转换为数字(如果是) 没有读过