我希望在几周内做一个演示,并且想知道:在开发时你需要注意的十大Javascript不兼容性是什么?你绊倒了什么?我可以先从一个开始:
var somevar = {
'internet': 'explorer',
'hates': 'trailing',
'commas': 'in',
'json': 'code', // oh noes!
}
使用jQuery或base等框架可以解决哪些其他常见问题?
答案 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中被正确地基类化,那将会很好。