Javascript 字符串和数字之间的JS类型转换
我对javascript中的类型转换感到困惑Javascript 字符串和数字之间的JS类型转换,javascript,string,type-conversion,Javascript,String,Type Conversion,我对javascript中的类型转换感到困惑 var temp = "111" temp = temp + 0 // temp is "1110" now temp = temp - 0 // temp is number , 111 temp = "1110" - 0 // temp is number 1110 我很好奇是什么导致了两方面的差异 对不起,我忘记了作业导致了异常结果 我对此表示怀疑 temp = temp - 0 // temp is number , 111 产生
var temp = "111"
temp = temp + 0 // temp is "1110" now
temp = temp - 0 // temp is number , 111
temp = "1110" - 0 // temp is number 1110
我很好奇是什么导致了两方面的差异
对不起,我忘记了作业导致了异常结果 我对此表示怀疑
temp = temp - 0 // temp is number , 111
产生你提到的结果。看
您有一个观察错误(可能您实际使用了temp=0+temp;
)
一般说明:
+
运算符重载,-
运算符未重载
如果使用+
运算符,且一个操作数是字符串,则操作数将转换为字符串,并执行字符串串联(而不是加法)
-
运算符仅为数字定义,因此两个操作数都将首先转换为数字,然后执行减法。在javascript中,如果其中一个操作数不是数字,则+
运算符将对字符串执行类型转换,而-
运算符始终转换为数字
因此,在类型转换后,您的代码将如下所示:
var temp = "111";
//before cast and variable evaluation
var temp2 = temp + 0;
//after cast and variable evaluation
var temp2 = "111" + "0"; // evaluates to string "1110" => string concatenate
//temp2 is string "1110"
//before cast and variable evaluation
temp2 = temp2 - 0;
//after cast and variable evaluation
temp2 = 1110 - 0; //evaluates to number 1110 => number subtraction
//temp2 is number 1110
//before cast and variable evaluation
var temp3 = "1110" - 0;
//after cast and variable evaluation
var temp3 = 1110 - 0; // evaluates to number 1110 => number subtraction
//temp3 is number 1110
从。用于:
7.如果类型(lprim)为字符串或类型(rprim)为字符串,则返回
字符串,该字符串是将ToString(lprim)后跟
ToString(rprim)
8.返回将加法运算应用于ToNumber(lprim)和ToNumber(rprim)的结果
这意味着+
操作员将首先尝试字符串,如果其中一个是字符串。否则,它将通过将数字转换为数字来应用数字加法
用于:
5.让lnum为单数(lval)
6.让rnum为ToNumber(rval)
7.返回对lnum和rnum应用减法运算的结果
这意味着
-
运算符将始终转换为数字并应用数字减法运算。这是因为javascript中的字符串连接是用加号完成的,当然不能从字符串中减去字符串,因此减号没有等价物,所以当您考虑它时,这很有道理。temp=temp-0//temp是数字,111不正确。您将得到1110此问题似乎偏离主题,因为它似乎基于观察错误。您是对的,事实上,我忘记了导致异常结果的作业,对不起。