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

时间:2014-08-08 06:26:28

标签: 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

我很好奇是从两个方面导致这种差异的原因。

抱歉,我忘记了作业导致的异常结果。

3 个答案:

答案 0 :(得分:1)

我怀疑

temp = temp - 0 // temp is number , 111 

产生你在那里提到的结果。见http://jsbin.com/faquvobo/1/edit?js,output

您有观察错误(可能您实际使用过temp = 0 + temp;)。


一般解释:

+运算符已超载且-运算符不足。

如果使用+运算符且一个操作数是字符串,则操作数将转换为字符串并执行字符串连接(而不是添加)。

-运算符仅为数字定义,因此两个操作数首先转换为数字,然后执行减法。

答案 1 :(得分:0)

在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

答案 2 :(得分:0)

来自ECMAScript Language Specification。对于Addition operator

  

7.如果Type(lprim)是String或Type(rprim)是String,则返回   字符串,它是连接ToString(lprim)后跟的结果   ToString(rprim)

     

8.将添加操作的结果返回到ToNumber(lprim)和ToNumber(rprim)。

这意味着+运算符将首先尝试String,如果其中一个是String。否则,它将通过将数字转换为数字来应用数字。

Subtraction Operator

  

5.Let lnum是ToNumber(lval)。

     

6.Letum是ToNumber(rval)。

     

7.将减法运算的结果返回到lnum和rnum

这意味着-运算符将始终转换为数字并应用数字减法运算。