Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 字符串和数字之间的JS类型转换_Javascript_String_Type Conversion - Fatal编程技术网

Javascript 字符串和数字之间的JS类型转换

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 产生

我对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 
产生你提到的结果。看

您有一个观察错误(可能您实际使用了
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此问题似乎偏离主题,因为它似乎基于观察错误。您是对的,事实上,我忘记了导致异常结果的作业,对不起。