将字符串添加到数字和数字到字符串

时间:2014-10-30 19:54:30

标签: javascript types concatenation type-conversion

我在我的控制台中尝试了一些我不太了解的东西。

如果添加2 + 3 +“hello”,它会连接到“5hello”

但是,如果您保留此项并添加'hello'+ 2 + 3,它会连接到'hello23'

为什么呢?我的猜测是因为JavaScript查看第一个数据类型并尝试将其转换为该类型?有人可以详细说明这个吗?

4 个答案:

答案 0 :(得分:1)

添加(和其他关联运算符)按顺序从左到右处理。所以

2 + 3 + "hello"

就像写作

(2 + 3) + "hello"

5 + "hello"

首先添加,然后转换/连接。另一方面,

"hello" + 2 + 3

就像:

("hello" + 2) + 3

适用于

"hello2" + 3

"hello23"

答案 1 :(得分:0)

简单的操作顺序:

2 + 2 + "hello" //2 + 2 is evaluated first, resulting in 4. 4 + "hello" results in "4hello";
"hello" + 2 + 3 //"hello" + 2 is evaluated first, turning the result to a string, and then "hello2" + 3 is done.

答案 2 :(得分:0)

据我了解,2 + 2 + "hello"以这种方式评估:

  1. 查找任何运算符并将其推送到运算符堆栈:stack:+,+
  2. 找到任何符号并将它们推到操作数堆栈上:stack:2,2,“hello”
  3. 从操作员堆栈中取出第一个操作符 来自操作数堆栈的前2个操作数,执行:2 + 2 = 4
  4. 取第一个运算符和前两个操作数,执行:4 +“hello” =“4hello”
  5. 请注意,JS自动类型转换以这种方式使用+运算符(这是加法和连接),它可能(并且确实)在其他地方以不同的方式工作。 4 - "hello"没有任何意义,"0" == true将评估为false,而0 == ''代表。{{1}}。这是Javascript是当今最受欢迎的语言之一的原因之一。

答案 3 :(得分:0)

这是由于强制造成的。类型强制意味着当运算符的操作数是不同的类型时,其中一个将转换为"等价的"另一个操作数类型的值。要考虑的操作数取决于"数据类型"的层次结构。 (虽然JavaScript是无类型的),操作从从左到右执行。例如:

//from left to right
2 + 3 + "hello"

//performs the addition, then does coercion to "string" and concatenates the text
(2 + 3) + "hello"

这导致"5hello"

在对应

//from left to right
'hello' + 2 + 3

//string concatenation is the first, all subsequent values will do coercion to string
"hello23"

除非你使用括号,它具有更高的优先级

'hello' + (2 + 3)

返回"hello5"