Rob*_*die 15 javascript string numbers type-conversion addition
尝试在javascript中尝试一些怪癖:
首先,我做了
console.log("5" + 1);
Run Code Online (Sandbox Code Playgroud)
这打印51,这是正常的,数字和字符串都有+运算符,但由于字符串是第一个变量,它将1转换为字符串.
现在,当我这样做时:
console.log(1 + "5")
Run Code Online (Sandbox Code Playgroud)
我预计输出为6,因为我认为它会将字符串转换为数字.然而,魔术输出是15.
任何更有经验的javascript都可以让我感到满意吗?
dfs*_*fsq 27
引用ECMAScript规范加法运算符(+)部分:
- 如果Type(lprim)是String 或 Type(rprim)是String,则
返回串联ToString(lprim)后跟ToString(rprim)的结果的字符串
所以这里的顺序并不重要.
小智 8
console.log(1 +"5")我预计输出为6,因为我认为它会将字符串转换为数字....
但是,如果您写下以下内容,您会期待什么?
console.log(1 + " fine day")
Run Code Online (Sandbox Code Playgroud)
要么
console.log(1 + " answer(s) to my question")
Run Code Online (Sandbox Code Playgroud)
作为一般规则,不能保证字符串可以转换为数字.但任何数字都可以转换为字符串.这就是编写转换规则以转向兼容类型的原因.(在您作为程序员知道字符串可以安全地转换为数字的上下文中,您可以明确地这样做,以便+操作在两个数字之间.但是对于字符串通常不是这样.)
在其他情况下,这也是为什么当在后者键入的混合类型上操作时,小整数和低精度浮点数将转换为大整数或双精度浮点数的原因.您可以安全地将有限形式转换为更大的形式,但一般情况下您无法安全地进入另一个方向.小int可以表示为big int或double,但另一个方向通常不是安全转换.
因此,尽可能多地编写对混合类型的操作的转换规则,以便向安全通用类型的相互兼容类型移动.程序员可以为特殊情况编写显式转换,其中更通用的类型可以安全地转换为更有限的类型.