为什么数字+字符串是javascript中的字符串
Why is number + string a string in javascript?
在javascript:中尝试一些怪癖
首先我做了
console.log("5" + 1);
这会打印51,这是正常的,数字和字符串都有一个+运算符,但由于字符串是第一个变量,它会将1转换为字符串。
现在,当我这样做的时候:
console.log(1 + "5")
我期望输出为6,因为我认为它会将字符串转换为数字。然而,魔法输出是15。
有谁能在javascript方面更有经验为我提亮这一点吗?
引用ECMAScript规范加法运算符(+)部分:
- 如果类型(lprim)是字符串或类型(rprim)为字符串,则
返回字符串,该字符串是连接ToString(lprim)和ToString(rprim)的结果
所以订单在这里并不重要。
console.log(1+"5")我期望输出为6,因为我认为它会将字符串转换为数字。。。
但是,如果你写了以下内容,你会期待什么呢?
console.log(1 + " fine day")
或
console.log(1 + " answer(s) to my question")
作为一般规则,无法保证字符串可以转换为数字。但是任何数字都可以转换成字符串。这就是为什么编写转换规则是为了向兼容的类型移动。(在你作为程序员知道字符串可以安全地转换为数字的情况下,你可以明确地这样做,使+运算在两个数字之间。但对于字符串来说,这通常不是真的。)
在其他情况下,这也是为什么在对后一种类型的混合类型进行操作时,小int和低精度浮点会转换为大int或双精度浮点的原因。您可以安全地将有限的表单转换为较大的表单,但通常情况下,您不能安全地转向另一个方向。小int可以表示为大int或double,但另一个方向通常不是安全的转换。
因此,在混合类型上操作的转换规则是尽可能多地编写的,以朝着相互兼容的类型发展,这些类型是安全的常见类型。程序员可以为特殊情况编写显式转换,在这种情况下,更通用的类型可以安全地转换为更有限的类型。
在这两种情况下,值都将转换为字符串。将数字添加到字符串或将字符串添加到数字时,结果就是字符串。
只需使用parseInt(value)
或toString(value)
即可强制转换。
您可以尝试代码:console.log(1 + parseInt("5"))
=>6
Concatenation还在Javascript中使用+
。
var result = "String" + number + obj;
// is equivalent to
string result = "String" + number.ToString() + obj.ToString();
然而,在C#/.net中,你可以做同样的事情,你会得到同样的结果——System.Console.WriteLine("result is " + 10 + 20);
。
在JavaScript(以及C#)中,字符串是不可变的。它们永远无法更改,只能用其他字符串替换。您可能知道combined+"String"不会直接修改组合变量-操作会创建一个新字符串,该字符串是将两个字符串连接在一起的结果,但如果您希望更改组合变量,则必须将该新字符串分配给该组合变量。
关于使用数学运算符进行字符串串联的论点可以说是一个"不正确"的论点,但也有一个论点认为,使用+进行大量字符串串联可能非常缓慢。
- 将DOM节点值与字符串Javascript进行比较
- 到UpperCase字符串Javascript中的特定字符索引
- 替换字符串javascript中的所有特殊字符..
- 在数组中查找某些字符串(Javascript)
- 解析特定的字符串Javascript(Node.js)
- 从字符串 JavaScript 中过滤多个正则表达式
- 在字符串 JavaScript 中使用正则表达式替换
- 忽略字符串javascript中的字符
- 如何检查url是否包含多个字符串.Javascript/jquery
- 截断字符串JavaScript
- 计算字符串javascript中的某些单词
- 从'获取本月的最后一天;2015-02-23'字符串(javascript)
- 从字符串javascript中获取键值对
- 从路径字符串 - Javascript 获取所有父路径
- 在字符串Javascript中查找丢失的字母
- AngularJS:如何使所有ng模型都是字符串.JavaScript和长整数
- 将浮点转换为至少有一个小数点的字符串(javascript)
- 替换字符串 JavaScript 中的多个文本
- 检查另一个字符串 JavaScript 中一个字符串是否有任何字符的最佳方法
- 将变量的值包含在 href 字符串 javascript 中