问题:
一些新手经常会把忘记生命变量,而直接使用。比如未var a;直接给a=2; 这在firefox下,没有问题。在chrome中也没啥大问题。但是在ie6中,如果在dom中有个id=“a”的元素。这时候,赋值a=2;就会报js错误。
问题代码:
<div id="obj1"></div> <script type="text/javascript"> alert(typeof obj1); obj1=2; </script>
以上代码:
在firefox下。 obj1是undefined。obj1 = 2。 这个好理解。
在ie6-8下。 obj1是object。 obj1=2赋值出错。因为类型错误啊。我猜测因为ie对dom的实现是com啊。所以有类型啊。
在chorme/opera/safari下。 obj1是object。 obj1= 2赋值成功。好像很完美的样子。
firefox的做法。明显是最规范的。从理论上说就是这样的。
ie6的做法。让obj1在js中直接使用,确实是方便了。但是这明显不符合语法。很容易让人误解。所以这两方面都有优缺点。
chrome的做法。既让人可以方便的使用obj1.又可以赋值。确保了不会出错。好像很完美一样。但是对于不知道这个用法的人来说,某些情况下就会出现问题了。
解决办法尝试1
<div id="obj1"></div> <script type="text/javascript"> var obj1; alert(typef obj1); obj1 = 2; </script>
firefox,不用说。很标准的。 undefined,赋值成功
opera, 也没什么问题,undefined,赋值成功
ie6-8, 没什么问题,undefined,赋值成功
chrome/safari obj,赋值成功
真是蛋疼+二逼的chrome啊。本来通过var声明就可以解决的问题。被搞成个鸟样。
最后办法:
因为二逼chrome/safari的存在,我们只能给obj赋初始值了。