Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Работа с массивом. Где ошибка ? (https://javascript.ru/forum/misc/54177-rabota-s-massivom-gde-oshibka.html)

Cepreu 07.03.2015 08:50

Работа с массивом. Где ошибка ?
 
Доброго времени суток ! Не могу сам найти ошибку. В результате работы скрипта должна выводиться сумма чисел хранящихся в массиве. Например ввожу в массив по порядку три числа 5 , 6 , 7. Надеюсь получить на выходе 18 , а получаю 0567 :-/ . Кто что подскажет ?

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Работа  с  массивом</title>
    <script src="arrays.js">
    </script>  
  </head>
  <body onload="rezultat()">
  </body>
</html>



Содержание файла arrays.js

function  rezultat() {   
 
   function  enter() {
   
     function isNumber( n ) {
       return  !isNaN(parseFloat( n )) && isFinite( n );
     }	
 
	 alert("Это  приложение  формирует  числовой  массив  введенный               
                    пользователем  и  выдает  сумму  его  элементов");
     
	 mas = [];
	 
	 do {   

         var  q = prompt("Введите  очередной  элемент  массива","");

	 if  ( isNumber( q ) ) {
             mas.push( q ); 
	 }
	   else {
         if  ( q == null ) {
           alert("Отмена  ввода");	   
		 }
         else { 		 
           if  ( q == "" ) {
             alert("Вы  ничего  не  ввели! Попытайтесь  ещё  раз.");
           } 
           else {
             alert("Вы  ввели  не  числовое  значение. Ввод  элементов  
                            массива  завершается.");
  	       }
         }		   
	   }	   
	 }  while  (  ( !isNumber( q ) && ( q == "" ) ) || ( isNumber( q ) && ( q != "" ) )  );	

     return  mas;	 

   }

   var  a, s = 0;
   
   arr = [];
   
   arr = enter();    
  
   for ( a = 0; a < ( arr.length ); a++ ) {
     s = ( s + arr[ a ] ); 

   }
   
   alert( " Сумма  элементов  введенного  массива  равна  " + s );
   
 }

ruslan_mart 07.03.2015 09:01

Cepreu, потому что ты прибавляешь строку, а не число.

Преобразуй строку в число:
s = ( s + +arr[ a ] );


Или заюзай такую конструкцию вместо цикла:
s = eval(arr.join('+'));

Cepreu 07.03.2015 09:22

Это я понял. Точнее мне неясно почему я прибавляю строку, а не число ? Ведь в моём массиве хранятся числа. Откуда вместо числа берется строка ?

ruslan_mart 07.03.2015 12:23

Cepreu, с чего ты взял, что числа там хранятся? prompt всегда возвращает строку, следовательно в твой массив записываются строки.

Cepreu 07.03.2015 17:17

Спасибо , учту !


Часовой пояс GMT +3, время: 03:57.