Javascript高级程序设计第八九章

1.全局变量不能通过delete操作符删除,而直接在window对象上的定义的属性可以。

var age = 29;
        window.color = "red";
        
        //throws an error in IE < 9, returns false in all other browsers
        delete window.age;

        //throws an error in IE < 9, returns true in all other browsers
        delete window.color;    //returns true
        
        alert(window.age);      //29
        alert(window.color);    //undefined
		alert(window.name);

尝试访问未声明的变量会抛出错误,但是通过查询window对象,可以知道某个可能未声明的变量是否存在

//这里会抛出错误,因为oldValue未定义
var newValue = oldValue;

//这里不会抛出错误,因为这是一次属性查询
//newValue的值是undefined
var newValue = window.oldValue

这个简单的原理其实用在很多地方上,比如可以判断是否为初次定义,怎么怎么样的


2.document.body和document.documentElement

参考链接:   document.compatMode

IE对盒模型的渲染在 Standards Mode和Quirks Mode是有很大差别的,在Standards Mode下对于盒模型的解释和其他的标准浏览器是一样,但在Quirks Mode模式下则有很大差别,而在不声明Doctype的情况下,IE默认又是Quirks Mode。所以为兼容性考虑,我们可能需要获取当前的文档渲染方式。

 document.compatMode正好派上用场,它有两种可能的返回值:BackCompat和CSS1Compat,对其解释如下:

BackCompat Standards-compliant mode is not switched on. (Quirks Mode)

CSS1Compat Standards-compliant mode is switched on. (Standards Mode)

官方解释:

BackCompat:标准兼容模式关闭。
CSS1Compat:标准兼容模式开启。

当document.compatMode等于BackCompat时,浏览器客户区宽度是document.body.clientWidth;
当document.compatMode等于CSS1Compat时,浏览器客户区宽度是document.documentElement.clientWidth。

(上面这一段我是不认同的,因为在document.body获取的是body标签,而document.documentElement获取的是html标签,但对于滚动条的Top确实是按照上面的原理,我已经实际验证过了)

浏览器客户区高度、滚动条高度、滚动条的Left、滚动条的Top等等都是上面的情况。

3.location:①window和document下的同一个对象属性,它提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能。

②每次修改location的属性(除hash外,页面都会以新URL重新加载)

③如果调用reload()不传递任何参数,页面都会以最有效的方式重新加载。也就是说,如果页面自上次请求以来并没有改变过,页面就会以最有效的方式重新加载。如果要强制从服务器重新加载,就需要传递参数true

4.navigator对象:有用的属性就是online、platform、userAgent

userAgent的用处可以识别所使用的浏览器,在近期做过的项目中发现,嵌入在app上的网页可以通过userAgent来识别APP客户端的版本信息,

详情戳链接第12条  联通项目经验与收获

platform的用处在于可以识别你用的是什么系统,到现在我也只用过来识别是PC端还是MOBILE端,

可以从下面的代码知道,我们只是识别用户的platform到底是win、mac、liunx,除此之外就是MOBILE端了,

而X11其实就是类UNIX和UNIX系统了,详情戳 介绍X winodw System

<script type="text/javascript"> 
        //平台、设备和操作系统 
       
        var system = { 
            win: false, 
            mac: false, 
            xll: false, 
            ipad:false 
        }; 
        //检测平台 
        var p = navigator.platform; 
        system.win = p.indexOf("Win") == 0; 
        system.mac = p.indexOf("Mac") == 0; 
        system.x11 = (p == "X11") || (p.indexOf("Linux") == 0); 
        system.ipad = (navigator.userAgent.match(/iPad/i) != null)?true:false; 
        //跳转语句,如果是手机访问就自动跳转到wap.baidu.com页面 
        if (system.win || system.mac || system.xll||system.ipad) {
        	
 
        } else { 
        	
 
            window.location.href = "mgdlt.jsp"; 
        } 
</script>

5.COM对象:①IE是以COM对象的方式实现插件的,而COM对象使用唯一标识符来标识。

②在IE8及之前版本,DOM对象是宿主对象,IE以及更早版本中的宿主对象是通过COM而非JScript实现的。所以document.createElement()函数确实是个COM对象,而非函数,IE9纠正了这个问题。

6.五大呈现引擎:IE,Gecko(火狐等)、Webkit(Safari、chrome、IOS、Android)、KHTML(Linus)、Opera,可能写的不对,要想知道详情,还是看JS高程的第九章,仔细地看来龙去脉,其实以前我也觉得这章很难,但看第三遍(一二遍看得很随便)的时候发现,也还好啦。

就算呈现引擎一样,但Javascript引擎却不一样,比如Safari浏览器和Chrome浏览器。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章