在JavaScript奇怪的行为中添加带整数的字符串?

时间:2014-10-03 18:29:52

标签: javascript

我只是发布了一些奇怪的东西(至少对我而言)发生在JavaScript中(不知道也许在其他语言中)。我有这个例子:

var a = "1";
var b = 1;

console.log(a + b); // this one returns 11 as it suppose
console.log(b + a); // this one returns also 11 as it suppose
console.log(a + b + b); // this one returns 111? why not 12 ?
console.log(b + b + a); // but this return 21 as it suppose

有人可以向我解释为什么会这样吗?非常感谢,如果这是一个非常愚蠢的问题,请对不起。

2 个答案:

答案 0 :(得分:2)

让我们分解您的代码:

var a = "1",    // string
    b = 1;      // number

console.log(a + b);
// a is a string and b is a number
// read from left to right
// string first, so when + goes to concatenate the two variables, you get
// a + b.toString() == "1" + "1" == "11"

console.log(b + a);
// same thing as above because of the .toString() method
// except the + operator sees number + string (versus string + number)
// however, this still casts the number to a string, since that's how
// strings and numbers are concatenated

console.log(a + b + b)
// same as above
// read from left to right
// string is encountered first, so everything after it is cast to a string
// "1" + b.toString() + b.toString() == "1" + "2" + "2" == "122"
// if you want it to be 12, you need to do
// console.log(a + (b + b))

console.log(b + b + a)
// the first + operator sees two integers, so they get added together first
// now it's console.log(2 + a)
// so (2).toString() + a == "2" + "1" == "21", if you follow the logic
// from the second example

答案 1 :(得分:1)

a是一个字符串,因此当您对字符串执行数学运算时,它只是连接。让我们通过你的:

console.log(a + b + b); // a + b = 11 - which is now a string + b = 111;
console.log(b + b + a); // b + b = 2 + a string 1 = 21