Javascript认为8大于12

时间:2013-09-15 22:28:48

标签: javascript

function function1() {
  arr = document.getElementById("textfield").value;
  arr = arr.split(",");
  length = arr.length;
  largestNum = -9999;
  for (i = 0; i < length; i++) {
    if (arr[i] > largestNum) {
      largestNum = arr[i];
    }
  }
  alert("Largest number: " + largestNum);
}

有人可以告诉我这里到底发生了什么,我不知道为什么它给了我8而不是12

http://jsfiddle.net/qkLpA/15/

修改 - 修复此处:http://jsfiddle.net/qkLpA/12/

3 个答案:

答案 0 :(得分:6)

您正在拆分字符串,因此结果数组的每个元素都是一个字符串。当你比较字符串时,它逐个字符,8大于1,所以它永远不会继续到2。

解决方案是在拆分后将项目转换为数字:

arr = arr.split(",").map(function(s) { return parseInt(s, 10); });

如果map令人困惑,您也可能不那么花哨,只需使用for循环来转换它们:

arr = arr.split(",");
for(var i = 0; i < arr.length; i++) {
    arr[i] = parseInt(arr[i], 10);
}

您可能还需要考虑使用-Infinity作为初始largestNum而不是-9999

答案 1 :(得分:3)

获得最大的亨利的方法要短得多:

function function1() {
  var arr = document.getElementById("textfield").value;
  arr = arr.split(",");
  var max = Math.max.apply(null, arr);
  alert("Largest number: " + max);
}

Fiddle

答案 2 :(得分:0)

你的问题是textfield字符串的.split()创建了一个字符串数组,而不是数字。因此,你在for循环中的比较if (arr[i] > largestNum)实际上是字符串的字典比较,而不是你可能想到的整数的数字比较。这就是“8”大于“12”的原因。

您可以在the updated jsfiddle中确认这一点,在比较之前将字符串转换为整数。