再看《JavaScript高级程序设计》第1-4章

第二章 在HTML中使用JavaScript

1、<script>元素的属性

1)async:可选,表示立即下载脚本,但可以同时进行页面的其他操作,async=”async”,只适用于外部文件,Firefox3.6、Safari5和Chrome有效

2)charset:可选,表示通过src属性指定的代码的字符集

3)defer:可选,表示脚本可以延迟到文档完全被解析和显示之后再执行,defer=”defer”,只适用于外部文件,IE4、Firefox3.5、Safari5和Chrome有效

4)language:已废弃

5)src:可选,表示包含要执行代码的外部文件

6)type(MIME类型):可选,表示编写代码使用脚本语言的内容类型,一般为type=text/javascript

2、<script>元素的使用:包含在<script>元素内部的JavaScript代码将被从上至下依次解释,在解释器对<script>元素内部的所有代码求值完毕以前,页面中的其余内容都不会被浏览器加载或显示。注意不要在非结束位置放置</script>,或者使用转义字符“\”。

1)直接在页面中嵌入JavaScript代码:<script type=”text/javascript”></script>

2)包含外部JavaScript文件:<script type=”text/javascript” src=”example.js”></script>,注意不要再包含嵌入代码。

第三章 基本概念

1、语法

1)区分大小写

2)标识符:第一个字符必须是一个字母,下划线和美元符号,其他字符可以是字母、下划线、美元符号或数字。ECMAScript标识符采用驼峰大小写格式,也就是第一个字母小写,剩下的每个单词的首字母大写

3)注释:单行注释//,多行注释/**/

2、变量:定义变量都使用var操作符,用var操作符定义的变量将成为定义该变量的作用域中的局部变量;省略var操作符创建的变量是全局变量;可以使用一个语句定义多个变量,用逗号分隔

3、数据类型:基本数据类型:Undefined、Null、Boolean、Number和String;复杂数据类型:Object

1)typeof操作符:对一个值使用 typeof 操作符可能返回下列某个字符串:

"undefined" ——如果这个值未定义;

"boolean" ——如果这个值是布尔值;

"string" ——如果这个值是字符串;

"number" ——如果这个值是数值;

"object" ——如果这个值是对象或 null ;

"function" ——如果这个值是函数。

2)Undefined类型:undefined用于表示未经初始化的变量

3)Null类型:值为null用于表示空对象指针

4)Boolean类型:值为true或false;Boolean()函数:将一个值转换为其对应的 Boolean 值。


数据类型


转换为true的值


转换为false的值


Boolean


true


false


String


任何非空字符串


" "(空字符串)


Number


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


0和NaN


Object


任何对象


null


Undefined


n/a(不适用)


undefined

5)Number类型:十进制、八进制(第一位必须是0,后面是0~7)、十六进制(第一位必须是0x,后面是0~F);在进行算术计算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制数值。

浮点数值:由于保存浮点数值需要的内存空间是保存整数值的两倍,因此 ECMAScript会不失时机地将浮点数值转换为整数值;

isFinite() 函数:用于确定一个数值是不是有穷的。

NaN:这个数值用于表示一个本来要返回数值的操作数未返回数值的情况;任何涉及 NaN 的操作都会返回 NaN; NaN 与任何值都不相等,包括 NaN 本身。isNaN()函数接收一个参数——任何类型,用于确定这个参数是否不是数值;isNaN() 在接收到一个值之后,会尝试将这个值转换为数值;任何不能被转换为数值的值都会导致这个函数返回 true 。

数值转换:

Number() 函数的转换规则如下:

如果是 Boolean 值, true 和 false 将分别被转换为 1 和 0。

如果是数字值,只是简单的传入和返回。

如果是 null 值,返回 0。

如果是 undefined ,返回 NaN 。

如果是字符串,遵循下列规则:

n  如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值(注意:前导的零被忽略了);

n  如果字符串中包含有效的浮点格式,如 "1.1" ,则将其转换为对应的浮点数值(同样,也会忽略前导零);

n  如果字符串中包含有效的十六进制格式,例如 "0xf" ,则将其转换为相同大小的十进制整数值;

n  如果字符串是空的(不包含任何字符),则将其转换为 0;

n  如果字符串中包含除上述格式之外的字符,则将其转换为 NaN 。

如果是对象,则调用对象的 valueOf() 方法,然后依照前面的规则转换返回的值。如果转换的结果是 NaN ,则调用对象的 toString() 方法,然后再次依照前面的规则转换返回的字符串值。

parseInt() 函数的转换规则如下:接收两个参数——字符串和转换的基数;如果第一个字符不是数字字符或者负号, parseInt()就会返回 NaN ;如果第一个字符是数字字符, parseInt() 会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符;如果字符串以 "0x" 开头且后跟数字字符,就会将其当作一个十六进制整数;如果字符串以 "0" 开头且后跟数字字符,则会将其当作一个八进制数来解析。

parseFloat() 函数的转换规则如下:字符串中只有第一个小数点是有效的;解析过程中忽略前导的零;十六进制格式的字符串则始终会被转换成 0;如果字符串包含的是一个可解析为整数的数(没有小数点,或者小数点后都是零), parseFloat() 会返回整数。

6)String类型:ECMAScript 中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。

toString() 方法:数值、布尔值、对象和字符串值(没错,每个字符串也都有一个 toString() 方法,该方法返回字符串的一个副本)都有 toString() 方法。但 null 和 undefined 值没有这个方;在调用数值的 toString() 方法时,可以传递一个参数:输出数值的基数。

String()方法:如果值有 toString() 方法,则调用该方法(没有参数)并返回相应的结果;如果值是 null ,则返回 "null" ;如果值是 undefined ,则返回 "undefined" 。

7)Object类型:

constructor :保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)就是 Object() 。

hasOwnProperty(propertyName) :用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名( propertyName )必须以字符串形式指定。

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

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

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

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

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

5、操作符

1)一元操作符:

执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的;

执行后置递增和递减操作时,变量的值都是在语句被求值以后改变的;

在对非数值应用一元加操作符时,该操作符会像 Number() 转型函数一样对这个值执行转换。换句话说,布尔值 false 和 true 将被转换为 0 和 1,字符串值会被按照一组特殊的规则进行解析,而对象是先调用它们的 valueOf() 和(或) toString() 方法,再转换得到的值。

2)位操作符:

按位非(~)就是返回数值的反码;

按位与(&)只在两个数值的对应位都是 1 时才返回 1,任何一位是 0,结果都是 0;

按位或(|)在有一个位是 1的情况下就返回 1,而只有在两个位都是 0的情况下才返回 0;

按位异或(^)这个操作在两个数值对应位上只有一个 1 时才返回 1,如果对应的两位都是 1 或都是 0,则返回 0;

左移(<<)会将数值的所有位向左移动指定的位数,左移不会影响操作数的符号位;

有符号的右移(>>)会将数值向右移动,但保留符号位(即正负号标记),会以符号位的值来填充所有空位;

无符号的右移(>>>)以 0 来填充空位;对正数的无符号右移与有符号右移结果相同,无符号右移操作符会把负数的二进制码当成正数的二进制码。

3)布尔操作符:

逻辑非(!):如果操作数是一个对象,返回 false ;如果操作数是一个空字符串,返回 true ;如果操作数是一个非空字符串,返回 false ;如果操作数是数值 0,返回 true ;如果操作数是任意非 0 数值(包括 Infinity ),返回 false ;如果操作数是 null ,返回 true ;如果操作数是 NaN ,返回 true ;如果操作数是 undefined ,返回 true ;

逻辑与(&&):如果第一个操作数是对象,则返回第二个操作数;如果第二个操作数是对象,则只有在第一个操作数的求值结果为 true 的情况下才会返回该对象;如果两个操作数都是对象,则返回第二个操作数;如果有一个操作数是 null ,则返回 null ;如果有一个操作数是 NaN ,则返回 NaN ;如果有一个操作数是 undefined ,则返回 undefined ;

逻辑或(||):如果第一个操作数是对象,则返回第一个操作数;如果第一个操作数的求值结果为 false ,则返回第二个操作数;如果两个操作数都是对象,则返回第一个操作数;如果两个操作数都是 null ,则返回 null ;如果两个操作数都是 NaN ,则返回 NaN ;如果两个操作数都是 undefined ,则返回 undefined 。

4)乘性操作符:

乘法(*):如果是 Infinity 与 0 相乘,则结果是 NaN ;如果是 Infinity 与非 0 数值相乘,则结果是 Infinity 或 -Infinity ,取决于有符号操作数的符号;如果是 Infinity 与 Infinity 相乘,则结果是 Infinity ;如果有一个操作数不是数值,则在后台调用 Number() 将其转换为数值,然后再应用上面的规则;

除法(/):如果是 Infinity 被 Infinity 除,则结果是 NaN ;如果是零被零除,则结果是 NaN ;如果是非零的有限数被零除,则结果是 Infinity 或 -Infinity ,取决于有符号操作数的符号;如果是 Infinity 被任何非零数值除,则结果是 Infinity 或 -Infinity ,取决于有符号操作数的符号;如果有一个操作数不是数值,则在后台调用 Number() 将其转换为数值,然后再应用上面的规则;

求模(%):如果被除数是无穷大值而除数是有限大的数值,则结果是 NaN ;如果被除数是有限大的数值而除数是零,则结果是 NaN ;如果是 Infinity 被 Infinity 除,则结果是 NaN ;如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数;如果被除数是零,则结果是零;如果有一个操作数不是数值,则在后台调用 Number() 将其转换为数值,然后再应用上面的规则。

5)加性操作符:

加法(+):如果有一个操作数是 NaN ,则结果是 NaN ;如果是 Infinity 加 Infinity ,则结果是 Infinity ;如果是 -Infinity 加 -Infinity ,则结果是 -Infinity ;如果是 Infinity 加 -Infinity ,则结果是 NaN ;如果是+0 加+0,则结果是+0;如果是-0 加-0,则结果是-0;如果是+0 加-0,则结果是+0;如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来;如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来;如果有一个操作数是对象、数值或布尔值,则调用它们的 toString() 方法取得相应的字符串值,然后再应用前面关于字符串的规则;对于 undefined 和 null ,则分别调用 String() 函数并取得字符串 "undefined" 和 "null" ;

减法(-):如果有一个操作数是 NaN ,则结果是 NaN ;如果是 Infinity 减 Infinity ,则结果是 NaN ;如果是 -Infinity 减 -Infinity ,则结果是 NaN ;如果是 Infinity 减 -Infinity ,则结果是 Infinity ;如果是 -Infinity 减 Infinity ,则结果是 -Infinity ;如果是+0 减+0,则结果是+0;如果是+0 减-0,则结果是-0;如果是-0 减-0,则结果是+0;如果有一个操作数是字符串、布尔值、 null 或 undefined ,则先在后台调用 Number() 函数将其转换为数值,然后再根据前面的规则执行减法计算。如果转换的结果是 NaN ,则减法的结果就是 NaN ;如果有一个操作数是对象,则调用对象的 valueOf() 方法以取得表示该对象的数值。如果得到的值是 NaN ,则减法的结果就是 NaN 。如果对象没有 valueOf() 方法,则调用其 toString()方法并将得到的字符串转换为数值。

6)关系操作符:小于(<)、大于(>)、小于等于(<=)、大于等于(>=), 如果两个操作数都是数值,则执行数值比较;如果两个操作数都是字符串,则比较两个字符串对应的字符编码值;如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较;如果一个操作数是对象,则调用这个对象的 valueOf() 方法,用得到的结果按照前面的规则执行比较。如果对象没有 valueOf() 方法,则调用 toString() 方法,并用得到的结果根据前面的规则执行比较;如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较。

7)相等操作符:

相等和不相等(==、!=):先转换再比较;

全等和不全等(===、!==):仅比较而不转换

8)条件操作符:variable = boolean_expression ? true_value : false_value;

9)赋值操作符:乘赋值(*=)、除赋值(/=)、模赋值(%=)、加赋值(+=)、减赋值(-=)、左移赋值(<<=)、有符号右移赋值(>>=)、无符号右移赋值(>>>=)

10)逗号操作符

6、语句

1)if语句

2)do-while语句

3)while语句

4)for语句

5)for-in语句:用于枚举对象的属性,for (property in expression) statement

6)lable语句:在代码中添加标签

7)break和continue语句

8)with语句:将代码的作用域设置到一个特定的对象中

9)switch语句:

switch (expression) {

case value: statement

break;

case value: statement

break;

case value: statement

break;

case value: statement

break;

default: statement

}

7、函数

1)参数:在函数体内可以通过 arguments 对象来访问这个参数数组,从而获取传递给函数的每一个参数; arguments 对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。

2)没有重载:如果在 ECMAScript中定义了两个名字相同的函数,则该名字只属于后定义的函数。

第四章 变量、作用域和内存问题

1、基本类型和引用类型的值

1)动态的属性

2)复制变量值:当从一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份放到为新变量分配的空间中。复制操作结束后,两个变量实际上将引用同一个对象。

3)传递参数:参数只能按值传递;在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量(命名参数);在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量。

4)检测类型:instanceof

2、执行环境及作用域

1)全局执行环境:在Web浏览器中,全局执行环境是window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的

2)作用域链:内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数。局部环境开始时会先在自己的变量对象中搜索变量和函数名,如果搜索不到则再搜索上一级作用域链。

3)延长作用域链:try-catch语句的catch块、witch语句

4)没有块级作用域

3、垃圾收集

1)标记清除:垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记,然后它会去掉环境中的变量以及被环境中的变量引用的变量的标记,而在此之后再被加上标记的变量将被视为准备删除的变量原因是环境中的变量已经无法访问到这些变量了。

2)引用计数:当声明了一个变量并将一个引用类型值赋给该变量时,则这个值的引用次数加1;如果同一个值又被赋给另一个变量,则该值的引用次数减1。

3)性能问题:如果垃圾收集例程回收的内存分配量低于15%,则变量、字面量和(或)数组元素的临界值加倍;如果例程回收了85%的内存分配量,则将各种临界值重置为默认值。

4)管理内存:解除引用

时间: 2025-01-08 05:55:26

再看《JavaScript高级程序设计》第1-4章的相关文章

javascript高级程序设计 第十四章--表单脚本

javascript高级程序设计 第十四章--表单脚本 在HTML中表单由<form>元素表示,在js中表单对应的是HTMLFormElement类型,这个类型也有很多属性和方法:取得表单元素的引用还是为它添加id特性,用DOM操作来获取表单元素:提交表单:把<input>或<button>元素的type特性设置为"submit",图像按钮把<input>元素的type特性设置为"image",也可以调用submit(

《JAVASCRIPT高级程序设计》第三章

<JAVASCRIPT高级程序设计>第三章主要讲述了这门语言的基础概念,内容多而浅,通过思维导图可以帮助我们很好的理清脉络. js函数使用function关键字来声明,以下是一个简单的例子: 1 function sayHi(name, message){ 2 alert("hello," +name + message); 3 } 函数中可以使用return语句指定返回值,如果只有“return;”,则函数在停止执行后,将返回undefined; 定义的函数有2个参数,那

《javascript高级程序设计》第六章总结

6.1 理解对象 属性类型 属性特性 行为描述 数据属性 Configurable 表示是否能通过delete删除属性从而重新定义属性. 数据属性 Enumerable 表示能否通过for-in循环返回属性.对于直接在对象中定义的属性,默认为true 数据属性 Writable 表示是否可以修改属性的值. 数据属性 value 表示这个属性的内部值. 访问器属性 Configurable 表示是否能通过delete删除属性从而重新定义属性. 访问器属性 Enumerable 表示能否通过for-

《javascript高级程序设计》第五章知识点总结

第五章知识点总结 1.object类型 访问对象的方法:①点表示法        (people.name) :      ②方括号表示法         (people[name]). 常用方法:hasOwnProperty()         用于检查给定属性在当前对象实例中是否存在 isPrototypeOf()              用于检测传入的对象是否传入对象原型 toString()                        返回对象的字符串表示 valueOf()    

《javascript高级程序设计》第十三章知识点

第十三章知识点总结 1.事件流: ①事件冒泡:事件开始时由最具体的事件接受,逐级向上传播到较为不具体的节点. ②事件捕获:不太具体的节点更早的接受事件,最具体的节点应该最后接到事件. 事件流包括三个阶段:事件捕获阶段.处于目标阶段.事件冒泡阶段. 2.事件处理程序 3.事件对象 IE 属性 除了上面的鼠标/事件属性,IE 浏览器还支持下面的属性: 属性 描述 cancelBubble 如果事件句柄想阻止事件传播到包容对象,必须把该属性设为 true. fromElement 对于 mouseov

javascript 高级程序设计 学习笔记01章 javascript的认知

hello world: 大家早上好 ,所谓一年之计在于春,一日之计在于晨.今天开始学习 高级程序设计第三版 第二遍 以前以迅雷不及掩耳之势草草看过一遍 ,但是什么也没记住 已经忘得差不多了.哈哈,原来我不是黄蓉,也不是天才,还是那句话 好记性不如烂笔头.这次学习高级程序设计第三版 是有目标的,有目的性的.所以我会把 每一章学习的心得和笔记 都记录在此.于己于人都方便.废话不多说 ,开始吧 今天的第一张 ,javascript 的实现.张鑫旭大神说过 非it(计算机专业的)的前端从业人员 学习j

再看《JavaScript高级程序设计》第6-7章

第六章 面向对象的程序设计 1.理解对象:无序属性的集合,其属性可以包含基本值.对象或者函数 1)属性类型: 数据属性:4个特性——[[Configurable]]表示能否通过delete删除属性从而重新定义属性,能否删除属性的特性,或者能否把属性修改为访问器属性,这个特性默认值为true:[[Enumerable]]表示能否通过for-in循环返回属性,e这个特性默认值为true:[[Writable]]表示能否修改属性的值,这个特性默认值为true:[[Value]]包含这个属性的数据值,读

《JavaScript高级程序设计》第21-25章

第二十一章 Ajax 与 Comet 1.XMLHttpRequest对象 1)创建XMLHttpRequest对象 function createXHR(){ if (typeof XMLHttpRequest != "undefined"){ return new XMLHttpRequest(); } else if (typeof ActiveXObject != "undefined"){ if (typeof arguments.callee.activ

JavaScript高级程序设计:第四章

变量.作用域和内存问题 1.ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,引用类型值指的是有多个值构成的对象. 2.动态的属性:定义一个基本类型值和引用类型值的方法是类似的:创建一个变量并为该变量赋值.但是,当这个值保存到变量中以后,对不同类型值可以执行的操作大相庭径.对于引用类型的值,我们可以为其添加属性和方法,也可以改变和删除其属性和方法.如下例子: var  person = new Object(): person.name