JavaScript显示无限。为什么?

时间:2014-03-31 02:17:00

标签: javascript arrays

我想只显示最小数字,而是显示最小数字和无穷大为什么我会得到无穷大?我该如何摆脱它?

var repeat, studentArr = [], markArr = [];
while (repeat !== 'n' && repeat !== 'N'){
    studentArr.push(prompt("Enter Student Name: "));
    markArr.push(parseInt (prompt("Enter Student mark: ")));
    repeat = prompt ("Do you want to enter another student: y/n");
}  
var largest = max(markArr);

Array.prototype.max = function() {
  return Math.max.apply(Math, markArr);
};

Array.prototype.min = function() {
  return Math.min.apply(Math, markArr);
};
var min = Math.min.apply(Math, markArr),
    max = Math.max.apply(Math, markArr);


document.write(min);

3 个答案:

答案 0 :(得分:3)

Array.prototype.max = function() {
  return Math.max.apply(Math, markArr);
};

Array.prototype.min = function() {
  return Math.min.apply(Math, markArr);
};

这些不是好的原型定义;他们被绑在一个物体上!让他们改为使用this

Array.prototype.max = function() {
    return Math.max.apply(Math, this);
};

Array.prototype.min = function() {
    return Math.min.apply(Math, this);
};

除此之外,max在您调用它以获取latest(它应该是undefined)时不是函数,并且您没有使用这些函数,无论是。我很惊讶你可以得到Infinity。

var min = markArr.min();
var max = markArr.max();

document.write(min);

或者我们可以停止使用原型; this fiddle works fine for me

答案 1 :(得分:0)

您需要传递数组本身。如果在数组上调用该方法,则方法中的 this 将是数组,因此:

Array.prototype.max = function() {
  return Math.max.apply(Math, this);
};

对其他方法也这样做。

请注意,扩展 Array.prototype 会影响 for..in 枚举数组,以便过滤掉 hasOwnProperty 测试原型上的可枚举属性。

答案 2 :(得分:0)

Infinity使用非整数时,也可以引发

Math.max问题。

然后,最好在致电map之前致电max

即:

urArray.map(function(e){return parseInt(e);/*or parseFloat()*/}).max()