JavaScript является языком со слабой типизацией, это означает, что в процессе работы программы тип переменной может меняться. Проиллюстрируем сказанное на следующем примере:
var x, y, z, str;
x = 3; //Числовой тип
y = true; //Логический тип
z = "Вася"; //Символьный тип
str = x+ y + z;
alert(str);

Рис. 8.7.
Здесь мы попытались сложить числовую, логическую и символьную величину. JavaScript по своему разумению преобразовал типы этих переменных, получился непредсказуемый результат.
Для того чтобы развеять сомнения лучше осуществить явное преобразование типов. Функция parseInt(строка, основание)преобразует строку в целое десятичное число, функция parseFloat(строка) - преобразует строку в десятичное число с плавающей запятой.
var a, b, c, d, str;
a = parseInt("3.14159158");
b = parseInt("40.5 рублей 67 копеек");
c = parseFloat("3.14159158");
d = parseFloat("40.5 рублей 67 копеек");
str = a + "<br>" + b + "<br>" + c + "<br>" + d;
document.write(str);

Рис. 8.8.