【javascript高级程序设计笔记】第一章至第三章

第1章 javascript简介

1.2Javascript实现

一个完整的javascript实现由下列三个不同的部分组成

核心(ECMAScript) 提供核心语言功能

文档对象模型(DOM) 提供访问和操作网页内容的方法和接口

浏览器对象模型(BOM)提供与浏览器交互的方法和接口

ECMAScript

它规定了这门语言的下列组成部分:

语法  类型  语句  关键字 保留字 操作符 对象

ECMA-262第5版,发布于2009年。

文档对象模型(DOM)

Document Object Model

W3C(world wide web consortium 万维网联盟)规划DOM

Dom级别

DOM1级(DOM Level1)1998年10月成为W3C推荐标准

DOM1级由两个模块组成:DOM核心(DOM Core)和DOM HTML

DOM核心规定如何映射基于XML的文档结构,DOM HTML在DOM核心的基础上加以扩展,添加针对HTML的对象和方法。

DOM2级在原来的DOM基础上扩充鼠标和用户界面事件、范围、遍历(迭代DOM文档的方法)等细分模块,通过对象接口增加了对CSS的支持。

DOM2级引入下列新模块,也给出了从多新类型和新接口的定义。

DOM视图(DOM Views):定义了跟踪不同文档(例如,应用CSS之前和之后的文档)视图的接口;

DOM事件(DOM Events):定义了事件和事件处理的接口

DOM样式(DOM Style):定义了基于CSS为元素应用样式的接口;

DOM遍历和范围(DOM Traversal and Range):定义了遍历和操作文档树的接口。

DOM3级则进一步扩展了DOM,引入了以统一方式加载和保存文档的方法–在DOM加载和保存(DOM Load and Save)模块中定义;新增了验证文档的方法–在DOM验证(DOM Validation)模块中定义。DOM3级也对DOM核心进行了扩展,开始支持XML 1.0规范,涉及XML Infoset、XPath和XML Base。

在阅读DOM标准的时候,读者可能会看到DOM0级(DOM Level 0)的字眼。实际上,DOM0级标准是不存在的;所谓DOM0级只是DOM历史坐标中的一个参照点而已。具体说来,DOM0级指的是Internet Explorer 4.0Netscape Navigator 4.0最初支持的DHTML

其它DOM标准

只针对自已的DOM标准,基于XML的

SVG(Scalable Vector Graphic 可伸缩矢量图)1.0

MathML(Mathematical Markup Language,数学标记语言)1.0

SMIL(Synchronized Multimedia Integration language,同步多媒体集成语言)

浏览器对象模型(BOM)

BOM Browser Object Model

BOM扩展:

弹出新浏览器窗口的功能;

移动、绽放和关闭浏览器窗口的功能;

提供浏览器详细信息的navigator对象;

提供浏览器所加载页面的详细信息的location对象;

提供用户显示器分辨率详细信息的screen对象

对cookies的支持

像XMLHttpRequest和IE的ActiveXObject这样的自定义对象

第2章 在HTML中使用javascript

2.1 <script>元素

HTML4.01为<script>定义了6个属性:

Async:可选。表示应该立即下载脚本,但不妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。只对外部脚本文件有效。

Charset:可选。表示通过SRC属性的代码的字符集。由于大多数浏览器会忽略它的值,因此这个属性很少有人用。

Defer:可选。表示脚本可延迟到文档完全被解析和显示后再执行。只对外部脚本文件有效。IE7-对嵌入脚本也支持这个属性。

Language:已废弃。

Src:可选。表示包含要执行代码的外部文件。

Type:可选。非必须,默认即是:text/javascript 也称MIME类型。

非IE浏览器中可使用以下值: application/javascript和application/ecmascript

2.2 嵌入代码与外部文件

使用外部文件的优点:

可维护性:遍及不同HTML页面的javascript会造成维护问题。

可缓存:浏览器能够根据具体的设置缓存链接的有所外部javascript文件。如果有二个页面使用同一个文件,那么这个文件只需下载一次。最终结果就是能够加快页面加载的速度。

适应未来:通过外部文件来包含javascipt无须使用XHTML或注释hack。Html和XHTML包含外部文件的语法是相同的。

2.3 文档模式

IE5.5引入了文档模式的概念,这个概念是通过全用文档类型(doctype)切换实现的。最初的两种文档模式是:混杂模式(quirks mode)和标准模式(standards mode)

这二种模式主要影响CSS内容的呈现,某些情况下也会影响到javascipt的执行。

如果在文档开始处没有发现文档类型声明,则所有浏览器都会默认开启混杂模式。但采用混杂模式不是什么值得推荐的做法,因为不同浏览器在这种模式下的行为差异非常大,如果不使用某些hack技术,跨浏览器的行为根本没有一致性可言 。

标准模式,可能通过使用下面任何一种文档类型来开启:

<!—HTML 4.01 严格型 -->

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN”

“http://www.w3.org/TR/html4/strict.dtd”>

<!—HTML 1.0型 -->

<!DOCTYPE HTML PUBLIC

“-//W3C//DTD HTML 1.0 Strict//EN”

“http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>

<!--HTML 5 -->

<!DOCTYPE html>

第3章 基本概念

ECMAScript 5引入了严格模式(strict mode)的概念。

启用严格模式,在顶部添加如下代码:

“use strict”;

它是一个编译指示(pragama),用于告诉支持的javaScript引擎切换到严格模式。为不破坏ECMAScript 3语法而特意选定的语法。

在函数内容的上方包含这条统治指示,也可以指定函数在严格模式下执行:

Function doSomething(){

“use strict”;

}

3.2 关键字和保留字

关键字

Break    do instanceof   typeof       case      else       new      var        catch finally       return       void       Continue     for       switch       while    debugger function        this       with     default  if   throw        Delete in   try

保留字

Abstract enum int short Boolean export interface static

Byte extends long super char final native synchronized class

Float package throws const goto private transient debugger

Implements protected volatile doble import public

在javascrpit引擎中使用关键字做标识符,会导致“Identifier Expected”错误。

3.3 变量

Var 声明

Massge = “hi”

给未经声明的变量赋值在严格模式下会抛出ReFerenceError错误

3.4 数据类型

ECMAScript有五种简单数据类型(也称基本数据类型):undefined,null,number,Boolean,string

还有一种复杂数据类型:Object。

3.4.1 typeof操作符

使用typeof操作符可能返回下列某个字符串:

“undefined”:如果这个值未定义

“Boolean”:如果这个值是布尔值

“string”:如果这个值是字符串

“number”:如果这个值是数字

“object”:如果这个值是对象或null

“function”:如果这个值是函数

3.4.4 boolean类型

该类型只有两个字面值:true和false。

true不一定等于1,而false也不一定等于0。

要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean(),如下所示:

Var massage = “ hello world”;

Var massageAsBoolean = Boolean(massage);

字符串message被转换成一个Boolean值。

数据类型

转换为true的值

转换为false的值

Boolean

true

false

String

任何非空字符串

“”(空字符串)

Number

任何非零数字值(包括无穷大)

0和NAN

Object

任何对象

Null

undefined

n/a

undefined

3.4.5 unmber类型

浮点数值在某些语言中被称为双精度数值。

十进制

八进制(以8为基数):第一位必需是零。在严格模式下是无效的

十六进制(以16为基数):前二位必需是0x,后跟任何十六进数字(0~9及A~F)。其中A-Z可以大写也可以小写。

浮点数值的最高精度是17位小数。

0.1+0.2=0.3000000000000004

2数值范围

         Number.MIN_VALUE

Number.MAX_VALUE

Infinity正无穷  -Infinity负无穷

确定一个数字是不是有穷的,使用isFinite()函数。最大与最小数值之间返回true;

访问Number.NEGATIVE_INFINITY 和Number.POSITIVE_INFINITY可以得到负和正Infinity的值。

NAN,非数值(Not a Number);NAN与任何值都不相等,包括NAN本身。

ECMAScript定义了isNAN()函数。

2数值转换

有三个函数可以把非数值转换为数值:

Number()         :可以用于任何数据类型

           Boolean:true 和false将分别转换为1和0;

           数字:只简单的传入和返回。

           Null:返回0.

           undefined:返回NaN

字符串,遵循以下规则:

  1. 只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,“1”=1          “123”=123                “011”=11
  2. 浮点格式,将其转换对应的浮点数值,忽略前导0
  3. 有效的十六进制将其转换为大小相同的十进制整数
  4. 空字符(不包含任何字符)转换为0
  5. 除上述格式之外的字符,转换为NaN

对象,遵循以下规则:

  1. 调用valueOf()方法,然后依照前面的规则转换
  2. 如果转换的结果为NaN,则调用对象的toString()方法,依照前面的规则再转换

parseInt()         :专门用于把串转换成数值

转换空字符串会返回NaN

parseFloat():专门用于把串转换成数值

3.4.6 string类型

字符字面量

字面量

含义

换行

制表



空格

回车

f

进纸

\

斜杠

单引号

双引号

xnn

十六进制代码如x41表示A

unnnn

十六进制代码如u03a3

数值、布尔值、对象和字符串值都有toString()方法,但null.undefined值没有这个方法。

多数情况下调用toString()方法不必传递参数。可以在调用时传递一个参数:输出数值的基数。默认以十进制格式返回数值的字符串表示。通过传递基数,可以输出二进制,八进制,十六进制,和其他任何有效进制格式表示的字符串。

3.4.7 Object类型

Object的每个实例都具有下列属性和方法。

Constructor:保存着用于创建当前对象的函数。构造函数(constructor)就是Object。

hasOwnProperty(propropertyName):用于检查给定的属性在当前对象实例中(而不是在实例原型中)是否存在。作为参数的属性名(propertyName)必须以字符串指定(如:o.hasOwnProperty(“name”);

isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型。

propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。与hasOwnproperty()方法一样,作为参数的属性名必须以字符串形式指定。

toLocalString():返回对象的字符串表示,该字符串与执行环境的地区对应。

toSting():返回对象的字符串表示。

valueOf():返回对象的字符串、数值或布尔值表示,通常与toString()方法的返回值相同。

Object是所有对象的基础,因此所有对象都具有这些基本的属性和方法。

BOM和DOM中的对象,都属于数组对象。

3.5 操作符

位操作符不理解

逻辑非(!)

逻辑与(&&)

第一个操作数

第二个操作数

结果

true

true

true

true

false

false

false

true

false

false

false

false

逻辑或(||)

第一个操作数

第二个操作数

结果

true

true

true

true

false

true

false

true

true

false

false

false

3.6.2 do-while语句

var i=0;

do{

i +=2

}while(i<10);   //10

只要i的值小于10,循环就会一直继续下去。

3.6.2 while语句

var i=0;

while(i<10){i += 2};

只要i的值小于10,循环就会一直继续下去。

3.6.6 label 语句

start: for(var i=0;i<count;i++){}

这个例子中定义的start标签可以由break或continue语句引用。加标签的语句一般都要与for语句等循环语句配合使用

3.6.7 break和continue 语句

break和continue语句用于在循环中精确的控制代码的执行。

Break语句会立即退出循环,强制继续执行循环后面的语句。

Continue语句虽然也是立即退出循环,但退出循环后会从循环的顶部继续执行。

3.6.7 with 语句

With语句的作用是将代码的作用域设置到一个特定的对象中。

定义with语句的目的主要是为了简化多次编写同一个对象的工作。

Var qs = location.search.substring(1);

Var hostname = location.hostname;

Var url = location.href;

上面几行代码都包含location对象。如果使用with语句,可以把上面的代码改写成如下所示:

With(location){

Var qs = search.substing(1);

Var hostname = hostname;

Var url =href;

}

严格模式下不允许使用with语句,否则将视为语法错误。

大量使用with语句会导致性能下降,也会给调试代码造成困难,因此在开发大型应用程序时,不建议使用with语句。

3.6.8 switch 语句

Switch(expression){

         Case value:  dosomething

           Break;

           Case value:  dosomething

           Break;

           Default:          dosomething

}

原文地址:https://www.cnblogs.com/maixi/p/4776519.html