343页中说,document对象有一个URL属性,Location对象也表示的为该窗口中当前显示的文档的URL,但是如果定位到文档中的片段标识符(如#top),location对象会做相应的更改,而document.URL属性却不会改变。(书中原文)但实际上,在chrome中测试的时候发现,ducoment.URL属性是也会改变的。
location.assign("http://www.baidu.com")和location.href="http://www.baidu.com"看上去是一样的 //在当前页面到基础上载入新的文档,如果在新的文档按返回键,则会返回当前页面
location.replace("http://www.baidu.com") //载入新的文档,如果在新的文档按返回键,则会返回首页
见344页14.2.2
现在有了ajax技术后,我们很多情况下都会使用无刷新的方式来进行文档载入,那么就会存在一个问题,就是这个无刷新的过程中url是不会改变的,那么如果实现前进和后退功能呢,这个时候我们可以在使用了ajax技术的地方采用a标签锚点方式。比如<a href="#page_1">第一页</a> 因为浏览器会读取这个锚点信息,所以url会进行改变,url改变了,那么自然这个网页就进入到了历史纪录中了。就可以采用前进后退到方式进行浏览了。
-----------------------------------------------16.11.02 结束---------------------------------------------------------------------------
-----------------------------------------------16.11.03 开始---------------------------------------------------------------------------
navigator对象
属性:
appName 除了IE为"Microsoft Internet Explorer",其它浏览器通常为了兼容取值为"Netscape"
appVersion 此属性通常以数字开始,并包含浏览器厂商和版本信息的详细字符串。没有标准的格式,所以没有办法直接用它来判断浏览器类型。
userAgent 浏览器在它的USER-AGENT HTTP头部中发送的字符串。这个属性通常包含appVersion中的所有信息。并且常常也可能包含其它细节。由于这个属性包涵绝大部分信息,因此浏览器嗅探代码通常用它来嗅探
platform 在其上运行浏览器的操作系统(并且可能是硬件)的字符串。
onLine 表示浏览器当前是否连接到网络
geolocation 定义用于确定用户地理位置信息的借接口。
javaEnabled() 一个非标准的方法,当浏览器可以运行java小程序时返回true。
cookieEnable() 非标准的方法,如果浏览器可以永久保存的cookie时,返回true。当cookie配置为“视具体情况而定”时可能会返回不正确的值。
screen对象
width和height 以像素为单位的窗口大小
availWidth和availHeight 实际可用的显示大小
见346页14.4.1
-----------------------------------------------16.11.03 结束---------------------------------------------------------------------------
-----------------------------------------------16.11.17 开始---------------------------------------------------------------------------
作为window对象属性的文档元素
如果一个dom元素用id属性来为元素命名,并且如果window对象没有此名称的属性(包括全局变量,因为全局变量也是挂载在window的属性上的),那么window对象就会将这个id作为自己的属性,用来表示对应的dom元素。(非常惊奇,原来还可以这样)
以下HTML元素如果有name属性的话,也会这样表现:
a applet area embed form frame frameset iframe img object
因为name不是唯一的,所以如果有多个相同的name属性,具有该名称的隐式全局变量会引用一个类数对象,这个类数组对象的元素是所有命名的元素。
见352页
-----------------------------------------------16.11.17 结束---------------------------------------------------------------------------
-----------------------------------------------16.11.19 结束---------------------------------------------------------------------------
接触到新名词HTMLCollection对象,如:document.images和document.forms。
像getElementsByClassName()返回的为NodeList对象。
HTMLCollection对象为只读的类数组对象。
见367页方框
node对象的属性
document对象,它Element对象和文档中表示文本的Text对象都是node对象。
parentNode 节点的父节点
childNodes 节点的子节点(NodeList对象)
firstChild 第一个子节点
lastChild 最后一个子节点
nextSibling 下一个兄弟节点
previousSibling 上一个兄弟节点
nodeType 节点类型,数字表示
nodeValue Text或者Comment节点(即注释)的文本内容
nodeName 元素的标签名,全大写。
下面的属性忽略Text和Comment节点,只考虑element节点,除IE之外
firstElementChild
lastElementChild
nextElementSibling
previousElementSibling
childElementCount
-----------------------------------------------16.11.19 结束---------------------------------------------------------------------------
-----------------------------------------------16.11.21 开始---------------------------------------------------------------------------
有些HTML属性在js中是保留字。对于这些属性,一般的规则是为属性名加'html'例如,HTML中label的for属性就变成了‘htmlFor’,
但是class是个例外,在js中为className。
见376页中上部。
Node类型定义了attributes属性。对于element对象,attributes属性是只读的类数组对象,它代表元素的所有属性。并且还可以用属性名索引:
document.body.attributes[0] //body元素的第一个属性
document.body.attributes.bgcolor //元素的bgcolor属性
document.body.attributes["ONLOAD"] //元素的onload属性
见378页15.4.4
通常设置innerHTML效率非常高,但是对innerHTML使用+= 通常效率低下,因为它既要序列化又要解析
outerHTML属性,包括了innerHTML以及元素本身。
见379页中部
-----------------------------------------------16.11.21 结束---------------------------------------------------------------------------
---------------------------------------------相关函数-----------------------------------------------------
Object.create(o) //创建对象,o为原型对象 121页6.2.1
o.hasOwnProperty("x") //判断属性x是否为o的自有属性(非继承) 128页6.4
o.propertyIsEnumerable("x") //判断属性是否为o的自有属性,并且可以枚举 128页6.4
Object.keys(o) //返回一个由o对象中可枚举的自有属性的名称组成的数组。 132页上
Object.getOwnPropertyNames(o) //返回o对象的所有自有属性的名称。 132页上
Object.getOwnPropertyDescriptor(o,"r") //查询o对象的r属性的属性描述符对象
Object.defineProperty(o,"x",{ value:1,
writable:true,
enumerable:false,
configurable:true});
//给o对象设置x属性,并对x属性添加属性描述符
Object.defineProperties(o,{
x:{value:1, writable:true, enumerable:true, configurable:true},
y:{value:2, writable:true, enumerable:true, configurable:true},
r:{
get:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},
enumerable:true,
configurable:true
}
});
//给o对象设置多个属性值,并对每个属性值添加属性描述符
Object.esExtensible(o) //判断o对象是否是可扩展的
Object.preventExtensions(o) //将o对象转换为不可扩展的,注意,如果转换为不可扩展的,则无法再将其转换为可扩展的。