首页 新闻 会员 周边

同样的JS写法,为啥只有IE9模式正常?

0
悬赏园豆:10 [已关闭问题] 关闭于 2013-09-21 01:21

同样的JS写法,为啥只有IE9模式正常?

使用 IE F12 开发者工具,选择不同的“文档模式” 从IE7 - IE9,只有IE9正常!

<!DOCTYPE html>
<html>
<script type="text/javascript">
if(console)
    document.write("console 正常");
else
    document.write("console 异常");
 
if(!window.console){
    var console={
        log:function(msg){}
    }
}
</script>
</html>

  只要将代码修改为如下,即可解决问题,在所有模式下都正常!。但是终究没有明白,上面的写法的问题本源!

if(!window.console){
    window.console={
        log:function(msg){}
    }
}
Asion Tang的主页 Asion Tang | 初学一级 | 园豆:200
提问于:2013-08-04 19:29
< >
分享
所有回答(4)
0

你是☞,上面多出来的一个if else吗?

幻天芒 | 园豆:37175 (高人七级) | 2013-08-04 21:28
0

因为ie-less-than-9版本不支持console不支持,所以console的类型是Undefined的,调用任何方法都将返回抛出异常“对象为 null 或未定义”而阻塞执行。
变量的调用,必须是前面已经声明,否则获取的变量值是undefined。(函数可以出现在同一段代码脚本的后面)

所以最好的解决方法是,在你的js-code之前定义以下代码:

if(!window.console){var console={log:function(msg){}}}

现在console被定义了,不会抛出异常,被静静的忽略了function(msg){}。

21天后 | 园豆:3 (初学一级) | 2013-08-04 22:33
0

if(!window.console){
 
    var console={
 
        log:function(msg){}
 
    }
 
}
if(console)
 
    document.write("console 正常");
 
else
 
    document.write("console 异常");
 

这样一样也会正常,!window.console时,没有console对象, 你自定义了一个,就在下面的判断中找到了这个console对象了,就 不会出现异常了。

small-joker | 园豆:144 (初学一级) | 2013-08-22 12:54
0

感觉应该浏览器某些版本的BUG。类似:if(-[1,]){ alert("非IE"); }else{ alert("IE"); }

经过测试:IE9、IE10弹出“非IE”。

Asion Tang | 园豆:200 (初学一级) | 2013-09-21 01:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册