Javascript不兼容/不一致

时间:2009-04-01 03:52:45

标签: javascript

我希望在几周内做一个演示,并且想知道:在开发时你需要注意的十大Javascript不兼容性是什么?你绊倒了什么?我可以先从一个开始:

var somevar = {
 'internet': 'explorer',
 'hates': 'trailing',
 'commas': 'in',
 'json': 'code', // oh noes!
}

使用jQuery或base等框架可以解决哪些其他常见问题?

10 个答案:

答案 0 :(得分:7)

使用HTML标记,如

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

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

答案 1 :(得分:6)

嗯,隐含的分号存在问题。

return {
    a: 1,
    b: 2
}

有些人喜欢在自己的行上打开括号,如下所示:

return
{
    a: 1,
    b: 2
}

但是,最后一个语句将返回undefined,因为解析器会看到:

return;
{
    a: 1,
    b: 2
}

答案 2 :(得分:3)

var x = new Boolean(false); if(x)...... else ...;

是否采用'if'或'else'分支?

var x =“hi”,y = new String(“hi”);

typeof(x)和typeof(y)是什么?

编辑:..

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

“错误”对象是从IE到Firefox的不同签名。

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

答案 3 :(得分:2)

另一个(不要认为这经常出现):

(typeof document.getElementById)
IE中的

:“对象”

Firefox中的

:“功能”

答案 4 :(得分:0)

跨浏览器的JavaScript实现几乎没有任何不一致。如果有,那将是一场噩梦成倍增加(由于DOM实现中的多重不一致)。所以“十大Javascript不兼容性/不一致性”可能只能填充你发现的“Bottom One”。确实可能会有更多,但我很难指望它们是主要的,甚至值得关注。

答案 5 :(得分:0)

除了DOM API不一致(这是图书馆解决的问题),没有太多。

但是有些JS引擎实现了more features,如[] .map(),[] .filter()等,let语句或E4X。当我在以Mozilla为目标的开发(Firefox扩展,服务器端与Jaxer)和一般浏览器tageted开发(网站)之间切换时,我需要记住每个浏览器中可用的内容,以及不可用的内容。所有这些都是关于 的实施,而不是如何

答案 6 :(得分:0)

还有一个:

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

描述: http://blog.stevenlevithan.com/archives/cross-browser-split

他发布了RegEx对象的固定版本和测试页面: http://stevenlevithan.com/demo/split.cfm

答案 7 :(得分:0)

对于Date对象:

alert( (new Date()).getYear();

Firefox返回109

Internet Explorer返回2009

答案 8 :(得分:0)

alert(document instanceof Document)
在Firefox中

:真的!

Internet Explorer中的

:异常:文档未定义

答案 9 :(得分:0)

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中被正确地基类化,那将会很好。