尝试在JavaScript中使用一些奇技淫巧:
首先我执行了:
console.log("5" + 1);
这会打印出51,这很正常,因为数字和字符串都有一个+运算符,但是因为字符串是第一个变量,所以它会将1转换为字符串。
现在当我做了这个:
console.log(1 + "5")
我原本期望的输出结果是6,因为我以为它会把字符串转换成数字。然而,最终的神奇输出结果是15。请问有经验的JavaScript程序员能为我解释一下吗?
尝试在JavaScript中使用一些奇技淫巧:
首先我执行了:
console.log("5" + 1);
这会打印出51,这很正常,因为数字和字符串都有一个+运算符,但是因为字符串是第一个变量,所以它会将1转换为字符串。
现在当我做了这个:
console.log(1 + "5")
我原本期望的输出结果是6,因为我以为它会把字符串转换成数字。然而,最终的神奇输出结果是15。引用 ECMAScript 规范 加法操作符 (+) 部分:
- 如果 lprim 的类型是 String 或 rprim 的类型是 String,则
返回将 ToString(lprim) 和 ToString(rprim) 连接而成的字符串。
因此,这里的顺序不重要。
2 + "Hello"
变成 2 + "Hello" 的 ASCII 值
要好。 - Sarimaconsole.log(1 + "5") 我原本期望输出结果为6,因为我认为它会将字符串转换为数字。...
但如果你写了以下代码,你会得到什么结果呢?
console.log(1 + " fine day")
或者
console.log(1 + " answer(s) to my question")
parseInt(value)
或toString(value)
强制转换即可。console.log(1 + parseInt("5"))
=> 6在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#),字符串是不可变的。它们永远不能被更改,只能用其他字符串替换。您可能已经知道,合并+“String”不直接修改合并变量 - 操作创建一个新字符串,该字符串是连接两个字符串的结果,但如果要更改它,则必须将该新字符串分配给合并变量。
关于使用数学运算符进行字符串连接的争论可以说是一个“错误”的争论,但也有人认为,使用+进行大量字符串连接可能非常缓慢。
"5" + 1 == "51" != "15" == 1 + "5"
。 - Bakuriu