Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Internet Explorer中的数组长度不同,尾随逗号_Javascript_Arrays_Internet Explorer - Fatal编程技术网

Javascript Internet Explorer中的数组长度不同,尾随逗号

Javascript Internet Explorer中的数组长度不同,尾随逗号,javascript,arrays,internet-explorer,Javascript,Arrays,Internet Explorer,我目前正在使用数组形式的Javascript处理一些数据。数组末尾可能包含一个空条目,例如[1,2,]。在Google Chrome和Firefox中,该示例的长度为2;然而,在IE中,长度是3 简而言之:Internet Explorer在Javascript中给出的数组长度与Google Chrome和Firefox不同。有没有一种方法可以跨所有浏览器标准化这种行为 代码: 编辑: 很多答案都说后面不要有逗号,但是数据是这样给我的。 要处理您的编辑工作(在IE8中测试): 如果(a[a.

我目前正在使用数组形式的Javascript处理一些数据。数组末尾可能包含一个空条目,例如
[1,2,]
。在Google Chrome和Firefox中,该示例的长度为2;然而,在IE中,长度是3

简而言之:Internet Explorer在Javascript中给出的数组长度与Google Chrome和Firefox不同。有没有一种方法可以跨所有浏览器标准化这种行为

代码:

编辑:

很多答案都说后面不要有逗号,但是数据是这样给我的。

要处理您的编辑工作(在IE8中测试):

如果(a[a.length-1]==null)a.length-->/或a.pop()

有关更安全的测试,请参阅本页上的其他建议:-


顺便说一句,以前从未听说过这些单词-每天在这里学习新的东西。

否。IE错误地将单个尾随逗号解释为省略,并在不应该的时候将其添加到长度中(ECMA-262第11.1.4节)

编辑 为了澄清这里的混淆,IE将数组文字中的单个尾随逗号(错误地)视为省略,这意味着它增加数组的长度属性,但不创建属性。换句话说,假设:

var a = [0,1,];
在IE中,a.length是3,但没有属性a[2]。因此,如果适当的解决方案是仅从数组末尾删除已删除的成员(如果这些成员存在问题,这可能是最好的解决方案),那么:

将仅从数组末尾删除删除的成员(即不存在的属性),不会在其他位置删除它们,也不会浪费时间在整个数组上迭代(这可能导致删除的成员被添加为未定义)。要添加到Array.prototype,请执行以下操作:

Array.prototype.tidyTrailingElisions = function() {
  var i = this.length;
  while ( !this.hasOwnProperty(--i)) {}
  this.length = ++i;
  return this;
};

请注意,这就是Array.prorotype.filter的工作方式,它不会迭代删除的成员(它使用hasOwnProperty测试并删除任何删除的Meber作为筛选数组的一部分)。

尝试删除空元素:

a = a.filter(function(){return true});
然后它应该在IE和其他浏览器中以同样的方式工作

更新:如果JS版本低于1.6,请尝试以下操作:

Array.prototype.clean = function() {
  for (var i = 0; i < this.length; i++) {
    if (this[i] == undefined) {
      this.splice(i, 1);
      i--;
    }
  }
  return this;
};


a.clean()
Array.prototype.clean=function(){
for(var i=0;i
我只听说过对象,而不是数组。我不明白为什么会有加3票。前五个链接指向的是对象,而不是数组。因为尾随逗号的位置无关紧要,IE会像你看到的那样呕吐。当它是{}类型的对象并且搜索中的第一个条目也有关于数组的注释时,不需要只考虑这个问题。但为了以防万一,我将添加搜索谢谢第二次搜索,它帮助我重新找到了我的问题:是的,这将是理想的解决方案。因此,IE9+感谢您真正回答我的问题:“有没有办法在所有浏览器中标准化这种行为?”Andy:如果从末尾清理并在找到元素时停止,这不是更聪明吗?这可能会产生不希望的结果,它将删除数组中任何未创建为属性的数组索引,因此:
[,1,2].filter(function(){return true}).length
为2。我不认为任何浏览器对[,1,,,2]的处理方式不同,只有[…,]是。从一开始就浪费CPU清理@mplungjan的可能重复项:绝对不是重复项,因为我不仅仅是说:“哦,看!一个怪癖!”我要求一种跨浏览器的方法来标准化长度。这是给定的-它还说“可能”;)另见
a = a.filter(function(){return true});
Array.prototype.clean = function() {
  for (var i = 0; i < this.length; i++) {
    if (this[i] == undefined) {
      this.splice(i, 1);
      i--;
    }
  }
  return this;
};


a.clean()