Iva*_*van 15 javascript arrays internet-explorer
我目前正在使用数组形式的Javascript处理一些数据.该数组最后可能包含一个空条目,例如[1,2,].在Google Chrome和Firefox中,该示例的长度为2; 但是,在IE中,长度为3.
简而言之:Internet Explorer为Javascript中的数组提供的长度与Google Chrome和Firefox不同.有没有办法在所有浏览器中标准化这种行为?
码:
var a = [1,];
alert(a.length);
Run Code Online (Sandbox Code Playgroud)
编辑:
很多答案都说没有逗号,但数据是以这种方式提供给我的.
mpl*_*jan 18
Javascript浏览器怪癖 - array.Length
为了处理你的编辑,这个工作(在IE8中测试):
if (a[a.length-1]==null) a.length--; // or a.pop()
为了更安全的测试,请查看此页面上的其他建议:数组长度与Internet Explorer中的尾随逗号不同 - DEMO HERE
顺便说一下,从来没有听说过elision这个词或者之前已经省略了 - 每天都在这里学习新东西
不会.IE错误地将单个尾随逗号解释为省略号,并在不应该的时候添加一个逗号(ECMA-262第11.1.4节).
为了清除这里的混淆,IE将数组文字中的单个尾随逗号(错误地)视为一个省略号,这意味着它会增加数组的长度属性但不会创建属性.换句话说,给定:
var a = [0,1,];
Run Code Online (Sandbox Code Playgroud)
在IE中,a.length为3,但没有属性a [2].因此,如果一个合适的解决方案是仅从数组的末尾删除已省略的成员(如果它们是一个问题,这可能是最好的解决方案),那么:
function tidyTrailingElisions(array) {
var i = array.length;
while (!array.hasOwnProperty(--i)) {}
array.length = ++i;
return array;
}
Run Code Online (Sandbox Code Playgroud)
将仅从数组的末尾删除被删除的成员(即,不存在的属性),它不会在其他地方删除它们,也不会浪费时间迭代整个数组(这可能导致被删除的成员被添加为未定义).要添加到Array.prototype:
Array.prototype.tidyTrailingElisions = function() {
var i = this.length;
while ( !this.hasOwnProperty(--i)) {}
this.length = ++i;
return this;
};
Run Code Online (Sandbox Code Playgroud)
请注意,这就是Array.prorotype.filter的工作原理,它不会迭代elided成员(它使用hasOwnProperty测试并删除任何被删除的mebers作为过滤数组的一部分).
| 归档时间: |
|
| 查看次数: |
9510 次 |
| 最近记录: |