当前位置:  开发笔记 > 编程语言 > 正文

Javascript浏览器怪癖 - array.Length

如何解决《Javascript浏览器怪癖-array.Length》经验,为你挑选了2个好方法。

码:



    Unusual Array Lengths!

    





注意数组声明中的额外逗号.上面的代码为各种浏览器提供了不同的输出:

Safari:5

Firefox:5

IE:6

Safari和FF会忽略数组中的额外逗号,而IE将其视为数组中的另一个对象.

在一些搜索中,我发现关于哪个答案是正确的意见不一.大多数人都认为IE是正确的,但Safari也在做与Firefox相同的事情.我没有在Opera等其他浏览器上测试过这个,但我认为存在差异.

我的问题:

一世.哪一个是正确的?

编辑:根据一般共识(和ECMAScript指南),我们假设IE再次出错.

II.还有其他任何我应该警惕的Javascript浏览器怪癖吗?

编辑:是的,有大量的Javascript怪癖.www.quirksmode.org也是一个很好的资源.

III.如何避免这些错误?

编辑:使用JSLint验证您的JavaScript.或者,使用一些外部库.或者,清理您的代码.

感谢DamienB,JasonBunting,John和Konrad Rudolph的投入.



1> John..:

在我看来,Firefox的行为是正确的.IE中第6个值的值是多少(抱歉,我没有方便测试).由于没有提供实际值,我想它正在填充类似'null'的东西,当然,这似乎不是你在创建数组时想要发生的事情.

但是,在一天结束时,哪个"正确"并不重要,因为现实情况是您要定位一个浏览器,在这种情况下您可以忽略其他浏览器的操作,或者您要定位多个浏览器在哪种情况下,您的代码需要在所有这些代码上工作.在这种情况下,显而易见的解决方案是永远不要在数组初始值设定项中包含悬空逗号.

如果你有避免它的问题(例如由于某种原因你已经养成了(包括它的那种(坏的,imho)习惯)和其他像这样的问题,那么像JSLint这样的东西可能有所帮助.



2> Konrad Rudol..:

我很感兴趣所以我在ECMAScript 262 ed的定义中查了一下.3这是JavaScript 1.8的基础.相关定义见第11.1.4节,遗憾的是不太清楚.该部分明确指出开头或中间的精算(=遗漏)没有定义一个元素,但确实有助于整体长度.

在初始化器的末尾没有关于冗余逗号的明确陈述,但是由于省略,我得出结论,上述陈述暗示它们对总长度没有贡献,因此我得出结论,MSIE是错误的.

有关段落内容如下:

可以在元素列表的开头,中间或末尾省略数组元素.每当元素列表中的逗号前面没有赋值表达式(即开头的逗号或另一个逗号后面的逗号)时,缺少的数组元素会增加数组的长度并增加后续元素的索引.未定义Elided数组元素.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有