JavaScript权威指南

JavaScript权威指南

第一章 JavaScript概述

1.1 对JavaScript的误解
1.2 JavaScript的版本
1.3 客户端JavaScript
1.4 其他环境中的JavaScirpt
1.5 客户端的JavaScript:网页中的可执行内容
1.6 客户端JavaScript的特性
1.7 JavaScript的安全性
1.8 例子:用JavaScipt计算借贷支出
1.9 如何使用本书其余的部分
1.10 JavaScript探秘

第一部分 JavaScript的核心

第二章 语法结构

2.1 字符集
2.2 大小写敏感性
2.3 空白符和换行符
2.4 可选的分号
2.5 注释
2.6 直接量
2.7 标示符
2.8 保留字

第三章 数据类型和值

3.1 数字
3.2 字符串
3.3 布尔值
3.4 函数
3.5 对象
3.6 数组
3.7 null
3.8 undefined
3.9 Data对象
3.10 正则表达式
3.11 Error对象
3.12 基本数据类型的包装对象

第四章 变量

4.1 变量的类型
4.2 变量的声明
4.3 变量的作用域
4.4 基本类型和引用类型
4.5 无用存储单元的收集
4.6 作为属性的变量
4.7 深入理解变量的作用域

第五章 表达式和运算符

5.1 表达式
5.2 运算符概述
5.3 算术运算符
5.4 相等运算符
5.5 关系运算符
5.6 字符串运算符
5.7 逻辑运算符
5.8 逐位运算符
5.9 赋值运算符
5.10 其他运算符

第六章 语句

6.1 表达式语句
6.2 复合语句
6.3 if
6.4 else if
6.5 switch
6.6 while
6.7 do/while
6.8 for
6.9 for/in
6.10 标签语句
6.11 break
6.12 continue
6.13 var
6.14 function
6.15 return
6.16 throw
6.17 tyr/catch/finally
6.18 with
6.19 空语句
6.20 JavaScript语句小结

 第七章 函数

7.1 函数的定义和调用
7.2 作为数据的函数
7.3 函数的作用域:调用对象
7.4 函数的实际参数:Arguments对象
7.5 函数的属性和方法

第八章 对象

8.1 对象和属性
8.2 构造函数
8.3 方法
8.4 原型对象和继承
8.5 面向对象的JavaScript
8.6 作为关联数组的对象  (****************************166**********)
8.7 对象的属性和方法

第九章 数组

9.1 数组和数组元素
9.2 数组的方法

第十章 使用正则表达式的模式匹配

10.1 正则表达式的定义
10.2 用于模式匹配的String方法
10.3 RegExp对象

第十一章 JavaScript的更多主题

11.1 数据类型转换
11.2 使用值和使用引用
11.3 无用存储单元收集
11.4 词法作用域和嵌套函数
11.5 Function()构造函数和函数直接量
11.6 Netscape公司的JavaScript 1.2的不兼容性

第二部分 客户端JavaScript

第十二章 Web浏览器中的JavaScript

12.1 Web浏览器环境
12.2 在HTML中嵌入JavaScript
12.3 JavaScript程序的执行

第十三章 窗口和框架

13.1  Window对象概述
13.2  简单的对话框
13.3  状态栏
13.4  超时设定和时间间隔
13.5  错误处理
13.6  Navigalor对象
13.7  Screen对象
13.8  Window对象的控制方法
13.9  Location对象
13.10 History对象
13.11 多窗口和多框架

第十四章 Document对象

*********************291*******1

14.1  Document对象概述
14.2  动态生成的文档
14.3  Document对象的颜色属性
14.4  Document对象的信息属性
14.5  表单
14.6  图象
14.7  链接
14.8  锚
14.9  小程序
14.10 嵌入式数据

第十五章 表单和表单元素

15.1 Form对象
15.2 定义表单元素
15.3 脚本化表单元素
15.4 表单验证示例

第十六章 脚本化cookie

16.1 cookie概览
16.2 cookie的存储
16.3 cookie的读取
16.4 cookie示例

第十七章 文档对象模型

17.1 DOM概览 
17.2 使用DOM的核心API
17.3 DOM与Internet Explorer 4的兼容性
17.4 DOM与Netscape 4的兼容性
****357*** 17.5 简便方法:Traversal和Range API

第十八章 级联样式表和动态HTML

18.1 CSS的样式和样式表
18.2 用CSS进行元素定位
18.3 脚本样式
18.4 第四代浏览器中DHTML
18.5 关于样式和样式表的其他DOM API

第十九章 事件和事件处理

19.1 基本事件处理
19.2 2级DOM中的高级事件处理
19.3 Internet Explorer事件模型
19.4 Netscape 4事件模型

第二十章 兼容性

20.1 平台和浏览器的兼容性
20.2 语言版本的兼容性
20.3 非JavaScript浏览器的兼容性

第二十一章 JavaScript的安全性

21.1 JavaScript与安全性
21.2 受限制的特性
21.3 同源策略
21.4 安全区和签名脚本

第二十二章 在JavaScript中使用Java

22.1 脚本化Java小程序
22.1 在Java中使用JavaScript
22.3 直接使用Java类
22.4 LiveConnect数据类型
22.5 LiveConnect数据转换
22.6 JavaObject对象在JavaScript中的转换
22.7 从Java到JavaScript的数据转换

第三部分 JavaScript核心参考手册

第三部分 JavaScript核心参考手册

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

JavaScript:采用Unicode字符集编写

ECMAScript v3允许标示符中有Unicode转义序列,字符/u后接4个十六进制的数字,用来指定一个16位的字符编码

JavaScript中的对象有两重:①一种对象表示的是已命名的值的无序集合
                          ②表示的是有编号的值的有序集合,称为数组array
                          JavaScript还定义了一种特殊的对象:函数function

不区别整型数值和浮点型数值,JavaScript中所有的数字都是浮点型的,采
                           用IEEE 754标准定义的64位浮点格式表示数字
                           最大值+/-1.7976931348623157*10的303次方,
                           最小是+/-5*10的负324次方

JavaScript的数字格式允许精确地表示:-9007199254740992(-2的53次方)
                                    和9007199254740992(2的53次方)之
                                    间的所有整数,包括两边端点数

中的某些整数运算是对32位的整数执行的,尤其逐位运算,他们的范围从
                           -2147483648(-2的31次方)到2147483647(2的31次方-1)

 

能识别十六进制的直接量 以“0X”或“0x”开头 如:0xff911

JavaScript的浮点格式能精确表示出来的是有限个的:18437736874454810627个


方法toString()可以用它的参数指定的基数或底数(底数必须在2和36之间)把数字转换成字符串。
                  如:将一个数字转换为二进制数字:
                      x.toString(2);


Infinity                   无穷大的特殊值
NaN                        特殊的非数字值
Number.MAX_VALUE           可表示的最大数字
Number.MIN_VALUE           可表示的最小数字(与零最接近的数字)
Number.NaN                 特殊的非数字值
Number.POSITIVE_INFINITY   正无穷大的特殊值
Number.NEGATIVE_INFINITY   负无穷大的特殊值


无char这样的字符数据类型,要表示单个字符,必须使用长度为1的字符串

/n   是一个转义序列(escape sequence)
/u   表示由四位十六进制数指定的任意Unicode字符,如/u03c0表示π
/0   NULL字符(/u0000)
/b   退格符(/u0008)
/t   水平制表符(/u0009)
/n   换行(/u000A)
/v   垂直制表符(/u000B)
/f   换页   (/u00CC) 
/r   回车符 (/u00CD)
/"   双引号 (/u0022)
/'          (/u0027)
//          (/uC05C)  
/xXX    由两为十六进制数值XX指定的Latin-1字符
/uXXXX  有四位十六进制数XXXX指定的Unicode字符
/XXX    由一到三位八进制数(1到377)指定的Latin-1字符。
 


RegExp对象,正则表达式

基本数据类型的包装对象 包装(wrapper)

隐式声明的变量总是被创建为全局变量  作用域(scope) 全局(global)
函数体内,局部变量的优先级高于同名的全局变量
无块级作用域 局部变量在整个函数体中都是有定义的,但
     在执行var语句前是不会初始化的
       var scope="global";
       fuction f() {
           alert(scope);            //显示"undefined",而不是"global";
           var scope="local";       //变量在此处初始化,但到处都有定义
           alert(scope);            //显示"local"
       }

 


基本类型与引用类型,基本是值、引用只是引用。
            字符串好象与基本类型的实现一样,传递的是值
           
garbage collection


当JavaScript的解释器开始运行时,它首先,在执行任何JavaScript代码之
               前,创建一个全局对象(global object)。这个对象的属性
               就是JavaScript程序的全局变量.当声明一个JavaScript的全局
               变量时,实际上所做的是定义了那个全局对象的一个属性
               在顶层代码中可以使用this来引用这个全局对象。
               客户端JavaScript中,Window对象代表浏览器窗口,它是包
               含在该窗口中的所有JavaScript代码的全局对象。Window对象
               定义了全局的核心属性,此外它还定义了全局的客户端属性,如
               navigator和screen


JavaScript的实现允许有多哥全局执行环境,每个执行环境有不同的全局对象
               (在此情况下,每个全局对象就不完全是全局的了)
                一个框架中的代码可以用parent.frames[1]来引用另一个框架
                中的JavaScript代码,在第二个框架中的代码可以使用
                parent.frames[0].x来引用第一个框架中的全局变量x


值NaN永远不会与任何其他值等同,包括自身。检测其用全局函数isNaN()


相等运算符(==)等同运算符(===)
_____________________________________________________________________________________
1 比较数字,字符串和布尔值时使用的都是量值,当且仅当这两个变量存放的值相等时返回true;
2 比较对象,数组和函数时使用的则是引用,只有两个变量引用的是同一个对象时才返回true;
比较两个值的等同性必须遵循的规则
* 如果两个值具有相同的类型,就比较这两个值看是否相等
- 如果两个值都是字符串,而且在串中同一位置上的字符相同,他们就相等
- 如果两个值都是数字,那么他们相等,但是如果一个时NaN,或两个都是NaN他们不等
- 如果两个都是布尔值true或都是false,则相等
- 如果两个值引用的是同一对象,数组,或函数,那么他们相等,如果引用的是不同的对象,即使是可转
化成相同的原始值也不等
- 如果两个值都是null,另一个是未定义的,他们相等
* 如果两个值的类型不同,应把他们转换成相同的类型以使用上述的规则比较
- 如果一个值是数字,而另一个是字符串,那么字符串被转换成数字比较
- 如果有一个值为true,那么他被转换成1,然后比较,false被转换成0
- 如果一个值是对象,而另一个值是数字或字符串,那么将对象转换成一个原始类型的值,然后比较,
javascript先尝试valueOf()转换,再尝试toString()转换。
_____________________________________________________________________________________

instanceof运算符:左边对象,右边构造函数名.左边对象是右边对象的一个实例,则返回true


JavaScript中所有的数字都是浮点型的,但逐位运算符却要求它的数字运算数是整型的

<< :左移一位乘2,左移两位乘四,以次类推
>> :带符号右移:右移一位相当于用2除(丢弃余数),右移两位相当于用4除。正为0,负为1
>>>:用零补足的右移运算:左边来的总为0

typeof返回字符串,说明了运算数的类型。
                  数字、字符串、布尔值,返回:number,string,boolean
                  对象、数组、null,返回:object
                  函数,返回:function
                  未定义的,返回:underfined

delete,删除对象的属性、数组元素或变量,成功返回true,不能被删除也返回false
       某些内部的核心属性和客户端属性不能删除
       var语句声明的变量也不能删除
       delete只能影响属性值,并不能影响被这些属性引用的对象

void 舍弃运算数的值,返回undefined
     <a href="javascript:void window.open();">Open New Windows</a> 打开一个新的浏览器页面,但超链接还存在
     <a href="javascript:window.open();">Open New Windows</a>      打开一个新的浏览器页面,超链接不存在,出现:[object]


if(expression){ //expression为true,或者可以转换为true则执行statement语句
  statement;
  }

case(){    //匹配case表达式用===等同运算符,而不是==相等运算符

  }


迭代(iteration)

标签语句:identifier:statement.如果标签名和某个变量名或者函数名相同,不必担心命名冲突

with语句:用变量的作用域和作用域链(即一个按顺序检索的对象列表)来进行变量名解析。with语句
      用于暂时修改作用域链
      with(frames[1].document.form[0]){
          name.value="";
          address.value="";
          email.value="";
      }
         使用了with语句的JavaScript代码很难优化,速度慢


在调用函数时,先要计算括号之间指定的所有表达式,然后把他们的结果作为
                函数的参数

 

JavaScript是一种无类型语言,所以不能给函数的参数指定一个数据类型,且不会检
                   查传递的数据是不是那个函数所要求的类型。
                   如果参数类型很重要,可以用typeof进行检测。


创建函数的三种方式:
function f(x) {return x*x;}              //function语句       //所有JavaScript版本中都有效
var f=new Fuction("x","return x*x;");    //Function()构造函数 //只在JavaScript 1.1及以后有效
var f=function(x) {return x*x;};         //函数直接量         //只在1.2及以后有效
                    函数直接量只被解析和编译一次,而作为
                    字符串传递给Function()构造函数的JavaScript代码则在每次调用
                    构造函数时只需要被解析和编译一次。

函数体内:arguments用来引用Arguments对象,可以按照数字获取传递给函数的参数
          arguments[],arguments.length
          虽然称做“arguments数组”,但arguments并非真正的数组,它是一个Arguments对象。
Arguments对象还定义了callee属性,用来引用当前正在执行的函数-->未命名函数调用自身


Function对象的length属性确切地说明了一个函数声明的形式参数的个数,在函数体内外都有效。

方法apply()和call()           

         _________
原型对象,存放方法和其他常量的理想场所.JavaScript中的所有函数都有prototype属性
 属性的继承只发生在“读”上,而“写”属性值时不发生
 如果读时,自己没有则去原型对象里找
 如果写时,自己没有则将写的属性作为自己新的属性Circle.prototype.pi=3.1415


JavaScript函数是对象,所以我们可以创建函数的属性,就像创建对象的属性一样

类方法,类方法与类关联在一起的方法,而不是和类的实例关联在一起的
 调用类方法,就必须用类本身,而不能用该类的特定方法

 

作为关联数组的对象:采用“.”运算符存取一个对象的属性,属性名用标示符表示的,标示符不是一个数据类型
------
Array.join()<--->String.split()
Array.reverse() 反转
Array.sort()    排序
Array.concat()  ==不能递归地展开一个元素为数组的数组
Array.slice(start,[end]) 返回子数组 如果end为负数则从最后一个元素算起:-1最后一个,-2倒数第二个
Array.splice()  从一个数组中移除一个或多个元素,如果必要,在所移除元素的位置上插入新元素,返回所移除的元素
push(),pop()  (都是对数组的最后一个元素操作,push()返回新的长度,pop()返回删除的值)
 联合使用就可以用JavaScript数组实现一个先进后出(FILO)栈
unshift(),shift()   在数组的头部操作   unshift()插入到头返回新长度
           shift()删除头并返回之后数组的第一个元素 
toString() 的返回值和无参数调用join()时返回的字符串相同
toSource()
------------------------
/b :匹配一词语的边界,位于字符/w和/W之间的位置.而[/b]匹配的是退格符.

正则表达式的属性:位于第二个斜杠之后。
 i:大小写不敏感的匹配
 g:执行全局匹配。即找到所有的匹配。
RegExp.multiline = ture;---->模式匹配将以多行的模式进行.

单行或多行模式匹配,用属性s和m来选择。
具有最小匹配的复制,由一个问号加上要复制的字符来声明,如:*?声明的是0个或多个复制,但匹
 配的是尽可能少的字符,而不是尽可能多的字符。

(?=[A-Z])匹配的是恰好位于一个大写字符前的位置。
(?|[A-Z])匹配的是不在一个大写字母之前的位置。
用于分组而不是引用的括号。一个后面为?:的左括号将用于分组,而不是创建对要匹配的文本的一个引用。
------------------------
用于模式匹配的String方法:
search():以正则表达式为参数,返回的是一个与之匹配的子串的开始字符的位置,如果没有任何匹配,则返回-1.
  search()不支持全局搜索,它忽略了正则表达式参数的属性g.
replace():
 var quote=/"([^"]*)"/g;
 text.replace(quote,"{$1}");
match():唯一参数就是一正则表达式,返回的是一个包含匹配结果的数组
 如果正则表达式没有属性g,match()进行的就不是全局检索.在这
 种情况下,数组的第一个元素就是匹配的字符串,而余下的元素
 则是正则表达式中用括号括起来的子表达式。
split():
------------------------
  RegExp对象.
new RegExp(exp1,exp2);
exp2:参数:i,g
当使用字符串将一个正则表达式传递给RegExp()时,必须用//替换掉所有的/字符.
每个RegExp对象都有一个compile()方法。当改变一个RegExp对象的内容,而不抛弃此
对象,可以用这一方法。compile()的参数和构造函数RegExp()的相同.
如:zipcode.compile("//d{s}(-//d{4})?","g");
--------
用于模式匹配的RegExp方法:
test(): var pattern=/java/i;
 pattern.text("JavaScript"); //返回true;
exec():是一个具有字符串参数的RegExp方法,而不是一个具有RegExp参数的String方法(match()).
 当一个全局的RegExp对象使用exec()时,它将把该对象的lastIndex属性设置成紧接着匹配
 子串的那个字符。当同一个RegExp对象第二次调用exec()时,它将从lastIndex属性所指示
 的字符串开始检索。如果exec()没有发现任何匹配,它会将lastIndex属性重置为0。这一特
 殊的行为使得可以反复调用exec()来遍历一个字符串中所有的正则表达式.
只有全局正则表达式才有lastIndex这样的特殊行为。如果RegExp对象没有属性g,exec()和test()将忽略
它的lastIndex属性.
--------
每个RegExp对象都有四个属性:
 source是一个只读字符串,它包含得失正则表达式的文本.
 global只读布尔值,说明正则表达式是否具有属性g.
 ignoreCase只读布尔值,是否具有i属性.
 lastIndex只写整数,对一个全局模式来说,这个属性存储了在字符串中下一次检索开始的位置.
--------
RegExp的类属性(静态属性)
作为静态属性,这些值都是全局性的,因此它们是临时性的,其他任何正则表达式操作都会将它们覆盖掉。
 leftContext   位于最新匹配左侧的文本
 rightContext  位于最新匹配右侧的文本
 lastmatch     被匹配的最新文本
 lastParen     与最新匹配的上一个带括号的子表达式匹配的文本
 $1,$2,...$9 
 input         如果没有传递给exec()和test()字符串,那么它就是要检索的字符串
 multiline     布尔值,指定了将检索的字符串作为单行模式来处理还是多行模式
如果将multiline设为true,那么^和$符号匹配的就是没一行的开头和结尾,而不是一个字符
 串的开头和结尾.默认在客户端JavaScript中,这个属性是被设为true的.
--------
RegExp属性的动态作用域
JavaScript使用的是静态作用域:即,JavaScript的函数是在定义它们的作用域中执行的,而不是在
 执行它们的作用域中执行。(如果框架A里的代码调用了框架B中定义的函数,而这个函数
 使用了全局变量,那么就在和框架B关联在一起的全局对象中查找这个全局变量的值)。
但RegExp对象的静态属性的作用域是动态的。
------------------------------------------------------------------------------------------------
  第十一章
没有一种JavaScript的语法、方法或属性使得可以改变一个字符串中的字符。由于字符串是不可变的,所
以根本就没有一种方法可以辨别字符串是使用值传递还是使用引用。
尽管JavaScript为效率起见,在复制和传递字符串时使用的是引用,但是在比较它们时使用的却是值。
-----
词法作用域规则:函数在定义它的作用域中执行.
为了使词法作用域与嵌套函数协同使用,JavaScript实现还使用了“闭包”,可以将它看作定义函数时有
效的作用域链和函数定义的组合.
-----
函数定义的三种方法:
 1.使用基本的function语句.
 2.使用构造函数Function()来定义函数.
 3.使用函数直接量来构造函数.
比较Funtion()构造函数和函数直接量:
1.构造函数Function()允许在运行时动态地创建和编译JavaScript代码,但
    函数直接量却是程序结构的一个静态部分,就像function语句一样.
2.每次调用构造函数Function()时都会解析函数体并且创建一个新的函数对象。(循环、经常调用中的效率问题)
    而函数直接量并不是每次都重新编译,也不是每次创建一个新的函数对象.
3.Function()创建的函数不使用词法作用域,它们总是被当作顶级函数来编译.如:

var y="global";
function constructFunction(){
    var y="local";
    return new Function("return y");  //不捕捉局部作用域.
}
//这行代码将显示"global".因为Function()构造函数.
//返回的函数并不使用局部作用域
//假如使用一个函数直接量,这行代码则可能显示"local".
alert(constructFunction());   //显示"global"
------------------------------------------------------------------------------------------------
   客户端JavaScript
  第十二章 Web浏览器中的JavaScript

作为全局对象的Window对象和客户端JavaScript代码的全局执行环境.
客户端对象的层次和构成它的一部分的文档对象模型.
事件驱动的程序设计模型.
在客户端JavaScript中,表示HTML文档的是Document对象,Window对象代表显示该文档的窗口(或框架)
-----
HTML文档包含嵌入式GUI.

<script>
f1.document.write("<script>");
f1.document.write("document.write('<H2>This is the quoted script</H2>')");
f1.document.write("</"+"script>");   //用+防止解析停止,或者用转义符“/”:f1.document.write("<//script>");
</script>
因为HTML的解析器不能识别带引号的字符串
-----
defer性质:暗示浏览器继续解析HTML文档,推迟执行脚本,直到遇到了不能推迟执行的脚本.
<script defer>

</script>
-----
在多框架时,各个框架的onload识见处理程序的调用顺序不能确定,只是父框架的处理程序在
所有子框架的处理程序之后调用。
onUnload()
-----
只要浏览器的顶级窗口存在,那么代表它的window对象就会一直存在,无论这个窗口装载和卸载
了多少页面,对它的Window对象的引用都有效。当关闭顶级窗口,这个Window对象也不会被撤消,
如果在其它窗口中任旧存在对这个window对象的引用,那么这个对象就不会被作为无用存储单元
回收。
------------------------------------------------------------------------------------------------
                                    第十三章 窗口和框架

alert()                        .在某些浏览器中不产生阻塞(尤其Unix平台上的Netscape3和4)
confirm()                      .会产生阻塞
prompt() 要求用户输入一个字符串.会产生阻塞。
-----
状态栏(status line)的内容是由Window对象的两个属性控制的:status,defaultStatus.
例:onMouseOver事件--必须返回为true,否则将执行浏览器自己的默认动作即显示链接的URL.
-----
onerror:传递给错误处理程序的参数有三个:
 第一个是描述错误的消息,如:“missing operator in expression”,“self is read-only”,“myname is not defined”
 第二个是一个字符串,存放引发错误的JavaScript代码所在的文档的URL
 第三个参数是文档发生错误的行代码。
-----
Navigator对象(Navigator对象实在Netscape Navigator之后命名的,IE支持,IE还支持:clientInformation是navigator的同义词)
如:
var browser="BROWSER INFORMATION:/n";
for(var propname in navigator){
 browser += propname + ":" +navigator[propname] + "/n"
}
alert(browser);
----------
open()打开一个新的窗口,有四个可选参数:
 1.URL,如果省略(可为null,或为空字符串),则打开的窗口将是空的。
 2.窗口的名字。这个名字可以做为<a>标记或<form>标记的target属性的值.如果是已经存在的窗口的名字,则open使用那个已经存在的窗口,而不再新打开一个。
 3.特性列表.窗口大小、GUI装饰等
 4.该参数只有在第二个参数命名的是一个已经存在的窗口时才有用。它是一个布尔值,
   声明了由有第一个参数指定的URL是应该替换掉旧窗口浏览历史的当前项(true),
   还是应该在窗口浏览历史中创建一个新的项(false),默认后者。
----------
moveTo()移动窗口的左上角到指定坐标
moveBy()移动指定数量的像素
resizeTo()
resizeBy()
----------
location对象(如:protocol,host,pathname,search)
 search属性:包含的是问号之后的那部分URL.
    方法:reload()会从Web服务器上再次装入当前显示的页面
   replace()会装载并显示指定的URL.
 调用replace()时,指定的URL就会替换浏览器历史列表中的当前URL,而不是在历史列表中创建一个新条目.
 则调用replace()时,Back按钮就不能返回历史文档,而通过将一个URL赋给窗口的Loction属性来装载则可以.
    Window对象的location属性  :引用一个Location对象,
    Document对象的location属性:只是一个只读字符串,并不具有Location对象的任何特性.
    大多数情况下,document.location和location.href是相同的,但是,当存在服务器重定向时,document.location包
    含的是已经装载的URL,而location.href包含的则是原始请求的文档的URL.
----------
History对象
 Window对象的history属性引用的是该窗口的History对象.
 但脚本不能真正访问History对象的数组元素。History对象的length属性可以被访问,但不提供任何有用信息.
 三个方法:back(),forward(),go()(有一整数参数,可以在历史列表中向前或向后跳过多少个页)。
----------
每个window对象都有一个frames[]数组,该数组包含了对该窗口中每一个框架的引用.
------------------------------------------------------------------------------------------------
                                    第十四章 Document对象
----------
Document对象的属性:
1.alinkColor,linkColor,vlinkColor
2.anchors[]锚
3.bgColor,fgColor文档的背景色和前景色
4.domain  该属性使处于同一Internet域中的相互信任的Web服务器在网页间交互时能协同地放松某项安全性限制
5.lastModified 一个字符串,包含文档的修改日期
6.links[]  文档中超文本链接的Link对象
7.referrer 文档的RUL,包含把浏览器带到当前文档的链接
8.title
9.URL
----------
动态生成的文档:
注意:只能在当前文档正在解析时使用write()方法向其输出HTML代码.即,只能在标记<script>中调用方法document.write(),
因为这些脚本的执行是文档解析过程的一部分。如果是从一个事件处理程序中调用document.write(),而且一旦文档被解析
该处理程序被调用,那么结果将会覆盖当前文档(包括它的事件处理程序),而不是将文本添加到其中。
----------
要创建新文档,首先需要调用Document对象的open()方法,然后多次调用write(),最后调用Document对象的方法close()以说
明创建过程结束了.与必需的close()调用不同,open()方法的调用则是可选的.如果调用了一个已经关闭了的文档的write()
方法,JavaScript会隐式地打开一个新的HTML文档.
---
write()方法可以具有多个参数.多个参数将被依次写入文档,就像它们已经连接在一起一样.
---
Document对象支持writeln()方法,由于HTML忽略换行,但杂一非HTML文档中有用.
----------
open()
HTML的MIME类型是text/html
纯文本的MIME类型是text/plain
----------
Document对象的颜色属性
 :gbColor,fgColor,linkColor,alinkColor,vlinkColor,只能在解析<body>标记之前设置它们,
 可以在文档的<head>部分使用JavaScript代码对它们进行动态设置,也可以将她们作为标
 记<body>的性质进行静态设置.
----------
Document对象的信息属性:
 lastModified
 title
 URL
 referrer:存放了使用户链接到当前文档的文档的URL
----------
图象:Document对象的images[]属性是一个Image元素的数组,每个元素代表文档中喊有的一个内联图象
---
Image对象的事件处理程序:
 onload 
 onerror 图象装载过程中出现了错误时调用
 onabort 用户在图象装载完之前就取消时调用
任何图象都可以调用这三个事件处理程序中的一个,而且只能是一个.
complete属性:当图象正在装载状态时为false,当图象装载完毕或停止装载则为true.
----------
链接
 Document对象的links[]数组包含的是代表文档中的超文本链接的Link对象
 标签<a>的属性href设置,在JavaScript和其以后的版本中,属于客户端的图象映射的标签<area>也
 可以在Document对象的links[]数组中创建Link对象
Link对象的属性:href,hostname存放对应的那个URL中的主机部分.
Link对象的属性href和URL都是可读可写的.
----------
锚:
Document对象的数组anchors[]包含了代表HTML文档中已命名位置的Anchor对象
----------
小程序
applets[]数组表示由标记<applet>或<object>嵌入在文档中的小程序对象.
----------
嵌入式数据,数组:embeds[]代表由标记<embed>或<object>嵌入文档的数据(除了小程序)的对象.
 被嵌入的数据可以是任何形式的(音频数据,视频数据,表,等等).
------------------------------------------------------------------------------------------------
                                    第十五章 表单和表单元素
----------
JavaScript的Form对象代表了一个HTML表单。通过Document对象的属性forms[]数组的元素可以找到Form对象.
Form对象的elements[]数组.
按文档中出现的顺序存放.
只有真正点击Submit按钮才会出发onsubmit事件处理程序,调用表单的submit()方法则不会出发它.
同样只有真正点击Reset按钮才会出发onreset事件处理程序,调用表单的reset()方法则不会出发它。
----------
表单元素的属性:
 type,form(对包含该元素的Form对象的只读引用),name,value,onclik,onchange,onfocus,onblur.
Select元素,Option元素
<select>标记有multiple性质则为多选项
 单选的Select元素下,可读可写的属性selectedIndex用数字指定了当前被选中的选项.
 对多选的型的Select元素,要确定哪个被选中了,须遍历options[]数组的所有元素,检查
 每个Option对象的selected属性的值。
Option元素还有text属性.
 options.length设置为0可以删除所有Option对象.
 把options[]数组的某个元素设置为null,则删除Select元素中的Option对象,后面的自动前移.
Option元素定义了构造函数:Option(),可以动态地创建新的Option元素.把它们附加早options[]数组的尾
 部可以给Select元素增加新选项.
----------
Hidden元素没有可视化外观,所以无事件处理程序.
------------------------------------------------------------------------------------------------
                                    第十六章 脚本化cookie
----------
cookie有四个可选的性质,分别控制它的生存期、可见性、安全性.
 expires,指定cookie的生存期(默认cookie是暂时存在的)
 path:默认cookie和创建它的网页以及与这个网页处于同一目录下的网页和处于该目录子目录下的网页关联在一起.
 domain:默认为创建cookie的网页所在的服务器的主机名(不能将一个cookie的域设置成服务器所在的域之外的域).
 secure:    
----------
name/value,cookie值不能含有分号、逗号或空白符,故之前许用escape()对之编码,然后读时用unescape();
date采用的日期规范应该是方法Date.toGMTString()编写的格式.
要改变一个cookie的值:使用一个名字和新的值再设置一次cookie值即可。
要删除:则用同一个名字和一个任意的值已经一个已经超过了的终止日期再设置一次即可.
Web浏览器保存的cookie总数不超过300个,为每个Web服务器保存的cookie数不超过20个(整个服务器而言),而
且每个cookie保存的数据不能超过4千个字节.

------------------------------------------------------------------------------------------------
                                    第十七章 文档对象模型
----------
文档对象模型(Document Object Model,DOM)是表示文档(如HTML文档)和访问、操作构成文档的各种元素(如HTML标记和
文本串)的应用程序接口(API)。
启用JavaScript的Web浏览器都定义了文档对象模型。
----------
把文档表示为树
Node接口为遍历和操作树定义了属性和方法。Node对象的childNodes属性将返回子节点的列表,
 firstChild,lastChild,nextSibling,previousSibling,parentNode属性提供了遍历树的方
 法.appendChild(),removeChild(),replaceChild,insertBefore()方法提供给文档添加节
 点或从文档树中删除节点。
----------
文档树中不同类型的节点由特定的Node子接口表示。每个Node对象都有nodeType属性指定节点的类型.
---
用Element接口的getAttribute()方法,setAttribute()方法和removeAttribute()方法可以查询、设
 置并删除一个元素的性质.
另一种使用性质的方式调用getAttributeNode(),返回表示性质和值的Attr对象
Attr对象不出现在元素的childNodes[]数组中,不像Element和Text节点那样是文档树的一部分
----------
Document对象的implementation属性引用一个DOMImplementation对象,它定义了名为hasFeature()的
方法,用这个方法(如果存在)可以检查一个实现是否支持特定的DOM特性或模块.
如:if(document.implementation &&
       document.implementation.hasFeature &&
       document.implementation.hasFeature("html","1.0"){
 //该浏览器支持1级Core和HTML接口
}
----------
遍历文档(的节点)的方法
----------
getElementsByTagName("*") 返回文档中所有元素的列表
----------
如果给appendChild()传递的节点已经是文档的一部分,那么首先它将删除该节点.
----------
使用Document段
DOM核心API定义了DocumentFragment对象,作为使用Document节点组的快捷方法.DocumentFragment是一种特殊类型的节
点,它自身不出现在文档中,只作为连续节点集合的临时容器,并允许将这些节点作为一个对象来操作.当把一个DocumentFragment
插入文档时,插入的不是DocumentFragment自身,而是它的所有子节点.
在把DocumentFragment插入文档时,段的子节点将从段中移动到文档中。进行插入操作后,段是空的,除非首次给它添加
新的子节点,否则不能再利用它。
----------
Traversal API由两个关键对象构成:每个对象提供了不同的文档筛选视图.
NodeIterator和TreeWalker.
NodeIterator对象的nextNode()方法和previousNode()方法
(NodeIterator不需要递归就可以遍历文档中被选种的部分)
NodeIterator对象提供了文档节点被展平的顺序视图,并支持筛选。
TreeWalker也提供了文档被筛选后的视图,但不能展平文档树。
当想遍历被筛选过的树,而不是调用nextNode()方法来遍历时,或者想对某些子树执行更复杂的遍历操作时,可用TreeWalker替代NodeIterator
---
Document对象为创建NodeIterator和TreeWalker对象定义了方法:createNodeIterator、createTreeWalker():
4个参数:第一个参数是开始遍历的节点
  第二个参数是数字,说明了NodeIterator和TreeWalker应该返回的节点类型
  第三个参数是一个可选的函数,用于指定更复杂的筛选.
  第四个参数是布尔值,指定了在遍历过程中是否扩展文档中的实体引用节点.
----------
DOM Range API,由一个接口构成:Range.
Range对象表示文档内容的一个连续范围,包括指定的开始位置和结束位置。
Range对象提供了定义范围的开始位置和结束位置的方法,复制和删除范围内容的方法以及在范围的开始位置
插入节点的方法。

------------------------------------------------------------------------------------------------
                                    第十八章 级联样式表和动态HTML
http://www.w3.org/Style/CSS
级联样式表(Cascading Style Sheet,CSS)
----------
优先规则:
 用户样式表覆盖默认的浏览器样式表,作者样式表覆盖用户样式表,内联样式表覆盖所有样式表.
 特例:值包括!important修饰符的用户样式性质覆盖作者样式。
----------
对于DHTML内容开发者来说,最重要的CSS特性是能用普通的CSS样式性质设置文档元素的可见性、大小和精确位置.
----------
position  设置元素应用的定位类型
 static   (要对文档元素使用DHTML定位技术,必须把它的position性质设置为其它三个值之一)
 absolute 绝对
 fixed
 relative
----------
如果同时设置了left,right,width性质,则:width性质将覆盖right性质。
height优先级高于bottom。
em:当前字体的行高度单位.
----------
命名规范:JavaScript中的CSS性质:
 JavaScript中的连字符被解释为减号,所以删除连字符,且在连字符后的字母改为大写:如:border-left-width-->borderLeftWidth
 CSS的float性质为:cssFloat(float是JavaScript的关键字).
----------
使用CSS2Properties对象的样式属性时:所有值必须是字符串.
                             要用JavaScript时,必须使用引号括起所有值.
        要把属性(如left)设置为计算值,要确保算式末尾有单位.
----------
文档中的每个HTMLElement元素都有style属性,该属性表示那个元素的内联样式性质.style属性引用的是一个
CSS2Properties对象,它为CSS2标准定义的每个CSS样式性质都定义了一个JavaScript属性。
CSS2Properties接口是CSSStyleDeclaration的子接口.因此每个文档元素的style属性还实现了CSSStyleDeclaration的属
性和方法。包括:setProperty(),getPropertyValue(),removeProperty()(删除指定的样式)
  cssText属性返回表示所有样式性质和它们值的文本表示.
----------
文档元素的style属性只表示那个元素的style性质,不包含影响元素的其他样式的信息(来自样式表)。要确定应用到元素的
完整样式集合,要使用Window对象的getComputerStyle()方法(该方法由AbstractView接口定义),返回值
是一个CSSStyleDeclaratrion对象,且只读。
----------
document.styleSheets[],可以访问包含到文档或链接到文档的样式表.
这个数组的元素是StyleSheet对象。
----------
DOM CSS API还定义了一些特殊对象类,用来表示性质值:
 RGBColor对象表示颜色,Rect对象表示矩形值,Counter对象表示CSS2计数器。
----------
------------------------------------------------------------------------------------------------
                                    第十九章 事件和事件处理
----------
四种完全不同的、不兼容的事件模型:
 原始事件模型:通常看作0级DOM API的一部分非正式内容,所有启用JavaScript的浏览器都支持->可移植性,特性有限。
 标准事件模型:强大的具有完整特性的事件模型,2级DOM标准对它进行了标准化.
 Internet Explorer事件模型:
 Netscape 4事件模型:
----------
在原始事件模型中,事件是浏览器内部提取的,JavaScript代码不能直接操作事件.
原始事件(raw event)或输入事件(input envent):用户移动鼠标、点击鼠标或敲击键盘时生成的。
语义事件(semantic enevt).
不支持通用的鼠标事件处理程序属性的标记包括:<applet> <bdo> <br> <font> <frame> <frameset> <head>
         <html> <iframe> <isindex> <meta> <style>
----------
事件处理程序的返回值:
 返回true执行默认的动作:onsubmit,onclick,onkeydown,onkeypress,onmousedown,onmouseup,onreset
 例外:onmouseover事件处理程序返回true,则阻止(当把鼠标移动到一超链接或图片上,默认动作是在状态栏上显示链接的URL)
----------
无论是用HTML性质定义事件处理程序,还是用JavaScript属性定义事件处理程序,都是把一个函数赋予文档元素的一个属性。
----------
JavaScript中的函数运行在词法作用域中:函数是在定义它们的作用域链中执行,而不是在调用它们的作用域中执行。
在把一个HTML性质的值设置为JavaScript代码串,以便定义事件处理程序时,隐式地定义了一个函数(在检测JavaScript中相应的事
件处理程序属性的类型时,可以看到这一点)。
----------
2级DOM中的高级事件处理
在0级DOM事件模型中,浏览器把事件分派给发生事件的文档元素,如果那个对象具有适合的事件处理程序,就运行这个事件处理程序。
----------
事件传播分三个阶段:
 一,捕捉(capturing)阶段,事件从Document对象沿着文档数向下传播给目标节点。
     如果目标的任何一个祖先(不是目标本身)专门注册了捕捉事件的处理程序,则传播过程中,就会运行这些处理程序。
 二,发生在目标节点自身,直接注册在目标上的适合的事件处理程序将运行。此与0级事件模型提供的事件处理方法相似。
 三,起泡(bubbling)阶段,事件将从目标元素向上传播回或起泡回Document对象的文档层次.虽然所有事件都受事件传播
     的捕捉阶段的支配,但并非所有类型的事件都起泡。
在事件传播过程中,任何事件处理程序都可以调用表示那个事件的Event对象的stopPropagation()方法,停止事件进一步传播。
Event对象的preventDefault()方法方法阻止默认动作发生。
----------
事件处理程序的注册:
0级API中,通过在HTML中设置性质或在JavaScript代码中设置对象的属性,来注册时间处理程序。
2级事件模型中,调用对象的addEventListener(),三个参数:
 第一个:注册处理程序的事件类型名
 第二个:处理函数(或监听者),调用此函数时,传递给它的唯一参数是Event对象。
 第三个:布尔值。为true,则指定的事件处理程序将在事件传播的捕捉阶段用于捕捉事件
   为false,则事件处理程序就是常规的,当事件直接发生在对象上,或发生在元素的子女上,又向上
   起泡到该元素时,该处理程序将被触发。

用addEventListener()方法注册的事件处理程序在定义它们的作用域中执行,不是由定义为HTML性质的事件处理程序使用的作用域链调用。
如果在同一个元素上多次注册了同一个处理函数,那么第一注册后的所有注册都将被忽略。

removeEventListener()方法:从对象中删除事件处理程序。
addEventListener()和removeEventListener()都由EventTarget接口定义.在支持2级DOM Event API的Web浏览器中,所有Document节点都实现了这个接口.
Event对象的属性:currentTarget引用一个对象,该对象注册了当前的事件处理程序,而且是以可移植的方式注册的.
----------
Event:
HTMLEvent模块定义的事件模型使用Event接口
 type:发生事件的类型
 target:发生事件的节点
 currentTarget:当前正在处理事件的节点
 eventPhase:数字,指定了当前所处的事件传播过程的阶段
 timeStamp:Date对象,声明了事件何时发生
 bubbles:布尔值,该事件是否在文档数中起泡
 cancelable:布尔值,声明事件是否具有能用preventDefault()方法取消默认动作
 stopPropagation():阻值事件从当前正处理节点传播
 preventDefault():阻止浏览器执行与事件相关的默认动作
UIEvent:
UIEvent接口是Event接口的子接口.它定义的事件对象类型要传递给DOMFocusIn,DOMFocusOut,DOMActivate类型的事件
           是MouseEvent接口的父接口.
 view属性:发生事件的Window对象
 detail:一个数字,提供事件的额外信息.对于click事件、mousedown事件,代表点击次数.
MouseEvent:
MouseEvent接口继承Event接口和UIEvent接口
 button:数字,声明了哪个鼠标键改变了状态
 altKey、crtlKey、metaKey、shiftKey:
 clientX、clientY
 screenX、screenY
 relatedTarget
MutationEvent:
MutationEvent接口是Event接口的子接口。 
----------
生成合成事件的三个步骤:
 创建一个合适的事件对象:Document对象的createEvent()方法创建,该方法一个参数:应该创建的事件对象的事件模块名
 初始化这个事件对象的域:
 把事件对象分派给想得到它的文档元素。
-----------------------
Internet Explorer事件模型
IE事件模型包括Event对象,该对象提供发生的事件的详细信息。但Event对象不是传递给
事件处理函数,而是作为Window对象的属性。window.event

window.event.cancelBubble=true;阻止事件起泡或制止它在包容层次中进一步传播,只适用于当前事件,当新事件
生成时,将赋予window.event新的Event对象,cancelBubble属性将被还原为它的默认值false.

attachEvent()注册的函数将被作为全局函数调用,关键字this引用的是Window对象,而不是事件的目标元素。
detachEvent()
-----------------------
Netscape 4事件模型
Netscape 4的事件模型与原始的0级事件模型相似,只是它在传递给处理函数的Event对象中提供事件的详细信息.它
还支持启用事件捕捉的专用方法。
Netscape 4事件模型不支持事件起泡,但它支持形式有限的事件捕捉(事实上,DOM标准的事件传播模型是Netscape捕
捉模型和IE起泡模型的组合)
-----------------------

-----------------------
------------------------------------------------------------------------------------------------
                                    第二十章 兼容性
-----------------------
兼容性问题重要分两大类:
 一、和平台有关的、浏览器有关的和版本有关的特性.
 二、另一类是bug和语言级别产生的不兼容性,其中包括JavaScript程序和非JavaScript浏览器之间的不兼
     容性问题。
-----
一:
最小公分母法:
防御性编码:
特性检查:好处->:它生成的代码不受特定的浏览器厂商或浏览器版本号的限制。
平台检查:
通过服务器端的脚本达到兼容性:HTTP请求头的User-Agent字段.
忽略问题:
适度停止运行:
-----
二:
language性质:不能用language性质指定标准的版本.
显式的版本测试:
避免与版本相关的错误:
为兼容性装载一个新页面:
------
非JavaScript浏览器的兼容性:两件事需做:1.确保JavaScript代码不会当作HTML文本显示出来,
                                       2.显示一条消息以通知访问者他他的浏览器不能正确处理这个页面。

对老式浏览器隐藏脚本:<!--
                       ...
                      -->
<noscript></noscript>:括起了一个任意的HTML文本块,不支持则显示.(是由Netscape公司发布Netscape3时引入HTML的)。
-----------------------

------------------------------------------------------------------------------------------------
                                    第二十一章 JavaScript的安全性
-----------------------
同源策略(Same-Origin Policy),Document对象的属性:domain,使用的字符串必须具有有效的域前缀。
-----------------------
------------------------------------------------------------------------------------------------
                                    第二十二章 在JavaScript中使用Java
-----------------------
嵌入Web页的Java小程序都属于Document.applets[]数组.
-----------------------
Java代码中控制JavaScript代码,通过类:netscape.javascript.JSObject实现,表示Java程序中的一个JavaScript对象。
由于所有JavaScript对象都出现在当前浏览器窗口的跟对象层次中,所以JSObject对象也必须出现在一个层次中.一
个Java小程序要与所有JavaScript对象交互,必须首先含有一个表示浏览器窗口(或框架)的JSObject对象,小程序
就显示在这个窗口(或框架)中.由于JSObeject类没有定义构造函数,所以不能只创建一个JSObject对象。必须调用
静态方法getWindow(),当传递给它一个对小程序的引用时,它就会返回一个JSObject对象,这个对象就表示含有那
个小程序的浏览器窗口。
---
在HTML文件的小程序标记<applet>中添加一个新性质:mayscript,则小程序可以使用JSObject类.
-----------------------
数据类型转换.
LiveConnect,JavaObject对象,JavaArray对象,JavaClass对象
------------------------------------------------------------------------------------------------

 

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭