将字符串添加到数字,将数字添加到字符串
Adding strings to numbers and numbers to strings
我在控制台中尝试了一些我不太理解的东西。
如果添加 2 + 3 + "hello",它将连接到"5hello">
但是,如果您保留此内容并添加"hello"+ 2 + 3,它将连接到"hello23">
为什么?我的猜测是因为 JavaScript 查看第一个数据类型并尝试将其转换为该类型?有人可以详细说明一下吗?
加法(和其他关联运算符(按从左到右的顺序进行处理。所以
2 + 3 + "hello"
就像写作
(2 + 3) + "hello"
或
5 + "hello"
首先是加法,然后是转换/串联。另一方面
"hello" + 2 + 3
就像:
("hello" + 2) + 3
这适用于
"hello2" + 3
或
"hello23"
操作顺序很简单:
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 + 2 + "hello"
是这样评估的:
- 找到任何运算符并将它们推送到运算符堆栈上:堆栈:+、+
- 找到任何符号并将它们推送到操作数堆栈上:堆栈:2,2,"hello">
- 从运算符堆栈中获取第一个运算符,然后操作数堆栈中的前 2 个操作数,do:2 + 2 = 4
- 取第一个运算符和前 2 个操作数,做:4 + "hello"= "4hello">
请注意,JS自动类型转换以这种方式与+运算符(既是加法又是连接(一起工作,它可能(并且确实(在其他地方的工作方式不同。 4 - "hello"
将毫无意义,"0" == true
将评估为错误,而0 == ''
站得住脚。这就是Javascript成为当今最受欢迎的语言之一的原因之一。
这是由于强制而发生的。类型强制意味着当一个运算符的操作数是不同类型的操作数时,其中一个操作数将被转换为另一个操作数类型的"等效"值。要考虑的操作数取决于"数据类型"的层次结构(尽管 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"
相关文章:
- 在 Javascript 不起作用的情况下为数字添加逗号
- 如何在 javascript 中为字符串中的数字添加下划线
- 将数字添加到文本框
- 使用javascript为网站的body标记中的所有数字添加一个span
- 如何在文本框vue.js上根据指定的数字添加行
- AngularJS如何获取一个数组,该数组将数字添加到函数中的元素,然后用另一个函数分散其注意力
- 使用 Jquery 为数字添加跨度
- 向数字添加百分之一位,该数字可以逗号或句点分隔
- 根据所选数字添加文本输入
- 将 JavaScript 数组中的 n 个数字添加到数组中的先前数字
- 有没有办法在不使用循环的情况下更新多个文档以将特定数字添加到一列
- 在javascript中自动为数字添加逗号
- Javascript:如何动态地将数字添加到变量名称中
- JQuery 获取链接并根据第 n 个数字添加变量
- 在 jquery 循环中将数字添加到运行总计
- 将字符串添加到数字,将数字添加到字符串
- 如何使用jquery将数字添加到输入ID名称中
- 我有一个javascript函数,可以将数字添加到数组中
- 如何在JS计数器中每3个数字添加一个冒号
- 只对大写字母和数字添加验证