两个代码块单独工作,而不是一起工作,我在哪里出错了

Two chunks of code work separately but not together, where do i err?

本文关键字:工作 一起 在哪里 错了 出错 两个 代码 单独      更新时间:2023-09-26

为什么下面的代码可以正常工作呢?

var howMany = prompt("How many numbers?");
    
var myArray = [];
for(var i = 0; i < howMany; i++){
   myArray.push(prompt("Enter a number"));
}
alert(myArray);

上面的代码旨在询问用户要在数组中放入多少个数字,并显示该数组。


下面的代码块看起来也很好。有一个提供的数组。然后代码检查这些数字是否真的是数字。然后把所有的数字加在一起。

var myArray = [1,2,3,4,5];
isDataUniform(myArray);
function isDataUniform(array) {
var first = array[0];
var length = array.length;
 for  (i=0; i<length; i++){
 	
 	if(typeof array[i]!== typeof first){
 		return false;
}
 	   	
}  
return true;
} 
if (isDataUniform(myArray) === true){
 	add(myArray);
} else {
	console.log("cant do adding");
}
function add(array) {
var f = 0;
var length = array.length;
 for  (i=0; i<length; i++){
 	f+= array[i];
 	
 }
 	alert("The result of addition of this set: " + myArray + " is: " + f);
 }


但是当我把两者结合起来时,它不起作用。它不加数字。

var howMany = prompt("How many numbers?");
var myArray = [];
for (var i = 0; i < howMany; i++) {
  myArray.push(prompt("Enter a number"));
}
isDataUniform(myArray);
function isDataUniform(array) {
  var first = array[0];
  var length = array.length;
  for (i = 0; i < length; i++) {
    if (typeof array[i] !== typeof first) {
      return false;
    }
  }
  return true;
}
if (isDataUniform(myArray) === true) {
  add(myArray);
} else {
  console.log("can't do adding");
}
function add(array) {
  var f = 0;
  var length = array.length;
  for (i = 0; i < length; i++) {
    f += array[i];
  }
  alert("Result of addition of this set: " + myArray + " is: " + f);
}

你能这么好心地纠正我吗?

prompt的返回值是字符串,而不是数字。

var n = prompt("Enter a number");
alert("typeof(n) = " + typeof(n));

即使输入一个数值,上面的代码也会显示"typeof(n) = string"。

必须将字符串转换为数字。

var howMany = prompt("How many numbers?");
var myArray = [];
for (var i = 0; i < howMany; i++) {
  myArray.push(parseInt(prompt("Enter a number"), 10));
}

提示函数保存字符串,所以这里的问题是您正在尝试对字符串进行求和。只要在add函数中添加一个类型转换,脚本就会正常工作:

function add(array) {
 var f = 0;
 var length = array.length;
  for (i = 0; i < length; i++) {
   f += parseInt(array[i]);
 }
}
var howMany = prompt("How many numbers?"),
    myArray = [];
for (var i = 0; i < howMany; i++) {
  myArray.push(parseInt(prompt("Enter a number"),10));
}
function isDataUniform(array) { 
  for (i = 0; i < array.length; i++) { 
    if (typeof array[i] !== "number") {
      return false;
    }  
  }
  return true;
}
function add(array) {    
  var f = 0;
  var length = array.length;
  for (i = 0; i < length; i++) {
    f += array[i];
  }
  alert("Result of addition of this set: " + myArray + " is: " + f);
}
if (isDataUniform(myArray) === true) {
  add(myArray);
} else {
  console.log("can't do adding");
}