2009-10-27 2 views
-2

У меня есть две переменные, «а» и «б» в моей JavaScript, и я хочу, чтобы добавить их вместе - я предполагаю, что этот код:JS Варс - Добавление

var a = 10; 
var b = 30 
var varible = a + b; 

Это ставит два номера рядом друг другу ... любые идеи, почему ... результат должен быть 40?

+0

Я поражен тем, как кто-то остановил этот вопрос. Это было из-за ошибки в коде? Удивительно ... – Victor

+0

Измените свой код и переименуйте переменную '' new'. Виктор прав, код, как пример, должен быть функциональным и не вводить новые ошибки. – Boldewyn

+1

Поскольку проблема, с которой он сталкивается, не может быть результатом этого кода, даже если «новый» исправлен. –

ответ

4

Вы, вероятно, есть строки вместо целых чисел. Это ваш код действительно походит на это:

var a = "10"; 
var b = "30"; 
var c = a + b; // "1030" 

Есть several ways для преобразования строк в целые числа:

a = parseInt(a, 10); // Parse the string 
b = b * 1;   // Force interpretation as number 
+2

Осторожно, используя parseInt без указания аргумента radix. –

2

new - зарезервированное слово, я бы использовал что-то еще в любом случае.

И с нормальным переменным именем c он работал для меня:

var a = 10; 
var b = 30 
var c = a + b; 
alert(c); 

сделал ожидаемый и предупредил 40

+0

Код, который он опубликовал, явно не тот, который он использует в реальной жизни, так как (большинство?) Интерпретаторы JavaScript будут генерировать синтаксическую ошибку в этом случае. Кроме того, одна из его переменных, вероятно, содержит строку. –

+2

Но это ошибка в размещенном коде. Извините, я не могу читать неопубликованный код. – Victor

0

Один или оба является строкой. Если вы получаете значения из ввода HTML или что-то еще, они определенно есть. Убедитесь, что они оба являются целыми числами, используя parseInt:

var newValue = parseInt(a,10) + parseInt(b,10); 

Кроме того, «новое» - это ключевое слово. Вы не можете использовать это для имени переменной :)

+1

осторожно использовать parseInt без аргумента radix. Вы можете легко попасть в неприятности, особенно если есть ведущие нули. –

1

new - это ключевое слово в JavaScript. вы не должны использовать его для объявления переменных или функций. изменить имя переменной от нового к чему-то еще

1

Вы уверены, что вы не сделали этого:

var a = '30'; 
var b = '40'; 

Здесь я показываю «30» в виде строки, а не числа, и я ожидал бы Оператор «+» объединяет две строки. Поскольку это надуманный код, вы не можете быть полностью уверены, где ваши переменные были первоначально назначены или какой тип они имеют. Вы можете проверить это следующим образом:

var a = '30'; 
var b = '40'; 
alert(typeof(a) + '\n' + typeof(b)); 

Если какой-либо из тех, кто говорит, «объект» или «строка», а не «число» это ваша проблема. Один из способов, который может случиться, что вы не ожидали, - это вход. Скажем, у вас есть такой код:

<input id="a" value="30" /> 
<input id="b" value="40" /> 
<script language="javascript"> 
    var a = document.getElementById('a').value; 
    var b = document.getElementById('b').value; 
</script> 

Здесь значение ввода текста всегда является строкой.

Если вы хотите, чтобы преобразовать переменную в число первых, вы должны использовать что-то вроде myVar - 0 к принуждать числовой операции или более-формальных parseInt() или parseFloat() функции (не забудьте параметр базисное для parseInt()). И всегда проверяйте результаты isNaN().

+0

+1 почему downvoted? –

+0

Отсутствие решения. –

+0

Он не просил разрешения. Он попросил «почему». Часто это гораздо важнее. Возможно, вы уже знаете, что вы можете сделать, чтобы исправить это, но вы хотите знать, почему он сломан, чтобы вы могли понять проблему и вообще избежать ее в будущем. Тем не менее, я добавил предложения решения в нижней части сообщения. –

1

Я действительно удивлен, что никто до сих пор не предложил очевидное: «Кастинг» с JavaScript (я устанавливаю его в кавычки, потому что это не настоящий кастинг).

var a = "1"; // string 
var b = Number(a); // number 
var c = String (b); // string again 

a + b; // "11" 
b + a; // 2 
a + c; // "11" 

Теперь, почему это не настоящее литье?Потому что вы не создаете новую переменную типа «число», а новый объект «Число» и инициализируете ее чем-то, что может быть числовым.

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