Javascript 数组最大值函数给出了意外的结果

Javascript 数组最大值函数给出了意外的结果,javascript,arrays,for-loop,max,Javascript,Arrays,For Loop,Max,我有此函数用于返回数组的最大值: Array.prototype.max = function() { var max = this[0]; var len = this.length; for (var i = 1; i < len; i++) { if (this[i] > max) { max = this[i]; } } return max; } data1Values.max()返回6而不是12。它以

我有此函数用于返回数组的最大值:

Array.prototype.max = function() {

var max = this[0];
var len = this.length;

for (var i = 1; i < len; i++)
{

    if (this[i] > max)
    {       
        max = this[i];
    }
}

    return max;
}
data1Values.max()
返回6而不是12。它以某种方式跳过了最后一个值

我在循环中插入了
alert(this[I])
alert(max)
,它可以识别这两个值(12为
this[I]
,6为
max
),但它不会进入条件


这里发生了什么?

您得到的是一个字符串数组,而不是数字。字符串“6”大于字符串“12”


尝试初始化数组,但不要在值周围加引号。

您得到的是字符串数组,而不是数字数组。字符串“6”大于字符串“12”


尝试初始化数组,但不要在值周围加引号。

您正在比较字符串。“2”大于“1000”

更改为数字或添加parseInt(此[i],10)

Array.prototype.max=function(){
var len=此长度;
var max=-1;
对于(变量i=0;imax){
max=val;
}
}
返回最大值;
}
var data1Values=['0','0','0','0','3','0','6','12']
警报(data1Values.max());

您正在比较字符串。“2”大于“1000”

更改为数字或添加parseInt(此[i],10)

Array.prototype.max=function(){
var len=此长度;
var max=-1;
对于(变量i=0;imax){
max=val;
}
}
返回最大值;
}
var data1Values=['0','0','0','0','3','0','6','12']
警报(data1Values.max());

您可以将
Math.max
一起使用。apply
从数组中获取最大值<代码>Math.max.apply(null,data1value),因此如果您希望在
Array.prototype
上使用该函数,请执行以下操作
Array.prototype.max=function(){return Math.max.apply(null,this);}Math.max
一起使用。apply
从数组中获取最大值<代码>Math.max.apply(null,data1value)
,因此如果您希望在
Array.prototype
上使用该函数,请执行以下操作
Array.prototype.max=function(){return Math.max.apply(null,this);}var data1Values = ['0','0','0','0','3','0','6','12']
Array.prototype.max = function() {

  var len = this.length;
  var max = -1;
  for (var i=0; i < len; i++) {
    var val = parseInt(this[i],10);
    if (val > max) {       
        max = val;
    }
  }

  return max;
}

var data1Values = ['0','0','0','0','3','0','6','12']

alert(data1Values.max());