2014-10-03 1 views
0

Я только что выпустил что-то странное (по крайней мере для меня), которое произошло в 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 

Может кто-нибудь объяснить мне, почему это произошло? Спасибо в продвинутом и извините, если это очень глупый вопрос.

+0

операции обрабатываются слева направо. Как только встречается строка, она выполняет конкатенацию. В противном случае это добавление. Так как сначала встречается 'b + b', он оценивается как дополнение, а затем объединяется с' a'. Вы можете посмотреть на поведение здесь: http://es5.github.io/#x11.6.1 – Ian

+1

Большое спасибо @Ian. – user2019037

ответ

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 
+0

Спасибо @royhowie. – user2019037

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 
+0

Большое спасибо за ваш ответ @tymeJV – user2019037

Смежные вопросы