2015-06-29 5 views
0

В настоящее время я изучаю JS, и когда я делаю некоторую практику, я нахожу некоторые проблемы, которые я не понимаю в типе данных в Javascript. Я понимаю, что JS НЕ требует специального указания типа, он будет автоматически выполнять преобразование типов, когда это возможно. Тем не менее, я страдаю одна проблема, когда я не делаю преобразование типа, который выглядит следующим образом:JAVASCRIPT Тип данных Выпуск

 var sum = 0; 
     function totalSum (a) { 
      if (a == 0) { 
       return sum; 
      } 
      else { 
       sum += a; 
       return totalSum(--a); 
      } 
     } 

     var i = prompt("Give me an integer"); 
     // var num = parseInt(i); 
     alert("Total sum from 1 to " + i + " = " + totalSum(i)); 
     // alert("Total sum from 1 to " + i + " = " + totalSum(num)); 

Я заметил, что код работает отлично, если я изменить тип данных из строки в целое, используя функцию ParseInt, так же, как комментарий в коде. НО, когда я НЕ делаю преобразование типа, все становится странным, и я получаю окончательный результат 054321, если я вводим значение приглашения как 5. И аналогичным образом ввод 3, получает 0321 и так далее.

Почему это так? Может кто-нибудь объяснить мне, почему totalSum будет таким числом? Разве javascript автоматически не помогает мне превратить его в целое число, чтобы оно работало в функции totalSum?

Образец кода можно также посмотреть в http://jsfiddle.net/hphchan/66ghktd2/.

Спасибо.

+0

'i' является строка, нужно преобразовать его в число,' Number (I) ' – Hacketo

ответ

1

Я попытаюсь разложить то, что происходит в методе totalSum.

Первый метод totalSum вызывается со строкой в ​​качестве параметра, как делать totalSum("5");

Тогда sum += a; (sum = 0 + "5": sum = "05") (обратите внимание, что sum стала вереница сейчас)

затем return totalSum(--a);, --a является преобразование значение a к числу и уменьшению его стоимости. так как вызов return totalSum(4);

Тогда sum += a (sum = "05" + 4: sum = "054") ...

0

Смотрите documentation of window.prompt: (курсив мой)

результатом является строка, содержащая текст, введенный пользователем, или нулевое значение.

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