我准备在几周后做一个演示,想知道:在开发过程中需要注意哪些前十个JavaScript不兼容问题?有哪些会让你卡壳?我可以先提供一个:
var somevar = {
'internet': 'explorer',
'hates': 'trailing',
'commas': 'in',
'json': 'code', // oh noes!
}
使用类库如jQuery或base不能修复的其他常见问题是什么?
我准备在几周后做一个演示,想知道:在开发过程中需要注意哪些前十个JavaScript不兼容问题?有哪些会让你卡壳?我可以先提供一个:
var somevar = {
'internet': 'explorer',
'hates': 'trailing',
'commas': 'in',
'json': 'code', // oh noes!
}
<div id="foo">
<a href="#">Link 1</a>
</div>
嗯,暗示的分号会导致问题。
return {
a: 1,
b: 2
}
有些人喜欢将左括号单独放在一行,像这样:
return
{
a: 1,
b: 2
}
undefined
:return;
{
a: 1,
b: 2
}
var x = new Boolean(false); if (x) ... else...;
这段代码中,'if'分支还是'else'分支会被执行?
var x = "hi", y = new String("hi");
x和y的typeof是什么?
编辑:..
parseInt("017")产生15(八进制),而不是17。
在使用对象作为哈希映射时,需要使用object.hasOwnProperty(key)来确保属性没有通过原型链继承。
'Error'对象在IE和Firefox中具有不同的签名。
还有一个问题(我认为这种情况不太常见):
(typeof document.getElementById)
JavaScript 在不同浏览器的实现中几乎没有任何不一致性。如果有的话,那将是一个噩梦(因为 DOM 实现中存在多个不一致性)。因此,“十大 JavaScript 不兼容性/不一致性”可能只能填上你发现的“最后一项”。确实可能还有一两个,但我几乎不指望它们会是主要问题,甚至值得关注。
除了DOM API的不一致性(这是库解决的问题),就没有太多问题了。
但是一些JS引擎已经实现了更多功能,比如[].map()、[].filter()等,let语句或E4X。当我在针对Mozilla开发(Firefox扩展,使用Jaxer进行服务器端开发)和一般浏览器开发(网站)之间切换时,我需要记住每个浏览器中可用的内容以及不可用的内容。因此,重点在于实现了什么,而不是如何实现。
又一个:
从 Firefox 到 IE 的正则表达式存在许多不一致之处:
有关说明: http://blog.stevenlevithan.com/archives/cross-browser-split
他发布了一个修复版本的 RegEx 对象和一个测试页面: http://stevenlevithan.com/demo/split.cfm
alert(document instanceof Document)
在Firefox中:true!
在Internet Explorer中:异常:文档未定义
关于日期对象:
alert( (new Date()).getYear();
Firefox 返回 109
Internet Explorer 返回 2009
//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)...
如果在IE中DOM元素能够正确地基类化就太好了。