为什么我可以复用和减去字符串和数字

时间:2014-06-09 19:07:05

标签: javascript types type-conversion

为什么在JavaScript中我可以使用数字的字符串执行乘法和减法等操作,例如" 10"有数字?

JavaScript是否进行类型推断?

考虑下面的例子,为什么在最后两个语句中我得到1010而不是任何一个?

var foo = "Hello, world!";
var bar = "10";



var x = foo * 10; // x is now bound to type number
console.log("type of x= " + typeof x + ", value of x= " +  x); // this will print number NaN, that makes sense..


var y = bar * 10; // y is now bound to type number
console.log("type of y= " + typeof y + ", value of y= " +  y); // this will print number 100

y = bar - 10; // y is now bound to type number
console.log("type of y= " + typeof y + ", value of y= " +  y); // this will print number 0 

y = bar + 10; // y is now bound to type string!!
console.log("type of y= " + typeof y + ", value of y= " +  y); // this will print number 1010

y = eval(bar + 10); // y is now bound to type number!!!! 
console.log("type of y= " + typeof y + ", value of y= " +  y); // this will print number 1010 

日志输出:

type of x= number, value of x= NaN
type of y= number, value of y= 100
type of y= number, value of y= 0
type of y= string, value of y= 1010
type of y= number, value of y= 1010

1 个答案:

答案 0 :(得分:3)

在第二个例子中

var y = bar * 10

Javascript假设您要执行数学运算并将原始字符串强制转换为数字。

在最后两个示例中,您尝试将10(数字)添加到条形图。 bar(您的变量)是一个字符串,因此JavaScript尽力而为,假设您想要一个字符串作为结果,并通过连接“10”(作为字符串)创建一个字符串,并且不会将您的原始字符串强制转换为数字。

类型强制的规则很复杂。我会尝试为您找到一个链接。但Douglas Crockford的“JavaScript:The Good Parts”是一本很好的读物。

修改

试试这个,非常好地解释。

http://united-coders.com/matthias-reuter/all-about-types-part-2/