Javascript不兼容/不一致

Javascript不兼容/不一致,javascript,Javascript,我打算在几周后做一个演示,我想知道:在开发Javascript时,您最关注的十大Javascript不兼容性是什么?什么事把你绊倒了?我可以从一个开始: var somevar = { 'internet': 'explorer', 'hates': 'trailing', 'commas': 'in', 'json': 'code', // oh noes! } 使用jQuery或base之类的框架无法或无法修复的其他常见问题有哪些 与HTML标记类似 <div id="foo

我打算在几周后做一个演示,我想知道:在开发Javascript时,您最关注的十大Javascript不兼容性是什么?什么事把你绊倒了?我可以从一个开始:

var somevar = {
 'internet': 'explorer',
 'hates': 'trailing',
 'commas': 'in',
 'json': 'code', // oh noes!
}
使用jQuery或base之类的框架无法或无法修复的其他常见问题有哪些

与HTML标记类似

<div id="foo">
    <a href="#">Link 1</a>
</div>


如果获得对外部div的引用,则在某些浏览器中它将有一个子节点,在其他浏览器中有三个子节点,具体取决于如何处理空白。有些将在link元素之前和之后有带有换行符和空格的文本节点作为
div#foo
的子元素。

跨浏览器的JavaScript实现几乎没有不一致之处。如果有,那将是一场噩梦(由DOM实现中的多个不一致性造成)。因此,“十大Javascript不兼容/不一致性”可能只能用您发现的“最底层”填充。事实上,可能还有一对,但我几乎不认为它们是主要的,甚至不值得注意。

除了DOM API的不一致性(这是库所解决的),它们并不多


但是一些JS引擎已经实现了,比如[].map(),[].filter()等,let语句或E4X。当我在面向Mozilla的开发(Firefox扩展、服务器端Jaxer)和通用浏览器标记开发(网站)之间切换时,我需要记住每个浏览器中有哪些可用,哪些不可用。所以这一切都是关于实现什么,而不是如何实现。

好吧,隐含分号有问题

return {
    a: 1,
    b: 2
}
有些人喜欢在自己的行中打开括号,如下所示:

return
{
    a: 1,
    b: 2
}
但是,最后一条语句将返回
未定义的
,因为解析器看到:

return;
{
    a: 1,
    b: 2
}
var x=新布尔值(false);如果(x)。。。否则

是否采用“如果”或“其他”分支

var x=“hi”,y=新字符串(“hi”)

(x)和(y)的类型是什么

编辑:

parseInt(“017”)生成15(八进制),而不是17

“Error”对象与IE和Firefox的签名不同

当使用对象作为hashmap时,您需要使用object.hasOwnProperty(键)来确保该属性不会通过原型链继承。

另一个属性(不要认为经常出现这种情况):

在IE中:“对象”

在Firefox中:“函数”

还有一个:

正则表达式从Firefox到IE,有很多不一致之处:

有关说明:

他发布了正则表达式对象的固定版本和测试页面:

对于日期对象:

alert( (new Date()).getYear();
Firefox返回109

Internet Explorer返回2009

alert(document instanceof Document)
在Firefox中:真的


在Internet Explorer中:例外:文档未定义

是altCognito点的扩展。。元素也不是已定义的基类型

//uses jQuery
function getSomething(input) {
   if (typeof(input) == string)
       input = $(input)[0] || $('#'+input)[0] || null;

   if (input instanceof Element)
       input = $(input);

   if (input instanceOf jQuery) {
       ...do something...
   }
}
我必须将instanceOf元素替换为

if (input && input.tagName)...

如果DOM元素在IE中都正确地进行了基类划分,那就太好了。

上面的代码中的问题是什么?后面的逗号(在“code”之后)可以出现在某些浏览器上,而不是在其他浏览器上。这可能会绊倒学习JavaScript的PHP开发人员,比如我,随着我逐渐习惯PHP总是接受最后一个逗号。请注意,这个问题在某种程度上与现在的这个问题有关:幸运的是,prototype.js之类的库都会处理这个问题。我不确定是否有任何库可以处理所有情况,尽管在不同浏览器中解析DOM中的空格并不一致,我想这就是重点。(数据丢失,无法替换)我稍后会在一些浏览器中尝试验证。这更多的是DOM问题,而不是JS问题。不过,JS在穿越DOM方面非常一致,这是一个非常好的问题。但这是一个不兼容的问题吗?不,这更像是一个问题。JS中不再有太多不兼容的地方了。DOM是罪魁祸首。那么Javascript的不兼容性在哪里呢?浏览器之间不完全是不一致的,这个答案提供了语言中最不一致的地方。
if (input && input.tagName)...