您的位置:首页 > Web前端 > JavaScript

【javascript高级程序设计】读书摘录1 JavaScript简介

2015-04-05 23:17 519 查看
一直在做服务器端的开发,却迫不得已要做一些前端页面的开发。努力恶补js中,顺便熟悉下node.js。

目标:前后端兼修。么么哒。

第一章、Javascript简介

1. ECMAScript与javascript的关系

2. DOM级别

DOM0实际上是不存在的标准,指IE4和NetScape4最初支持的DHTML

DOM1主要是映射文档的结构

DOM2扩充了鼠标和用户界面事件、范围、遍历等细分模块

DOM3进一步扩展了DOM,引入了统一加载和保存文档的方法,新增了验证文档的方法;支持XML1.0规范。

3. Javascript包含三个不同的部分组成:

(1) ECMAScript

(2) DOM

(3) BOM

第二章、HTML中使用Javascript

1、 HTML4.01 为<script>定义的属性:

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

(2) defer: 表示脚本可以延迟到文档完全被解析和显示之后再执行(并不是所有的浏览器都支持defer属性,需要慎重使用)

(3) language: 已废弃,原来用于表示编写代码使用的脚本语言,大多数浏览器会忽略这个属性,因此没有必要再使用了

(4) Src:可选。表示要执行的代码的外部文件。

(5) Type:必须,可以看做是language的替代属性,表示编写代码的语言脚本的内容类型(MIME).考虑到约定俗成和最大程度的浏览器兼容性,目前使用的属性值依旧是“text/javascript”

2、 兼容HTML, XHTML的javascript写法:

<script type="text/javascript">

//<![CDATA[

function compare(a, b){

if(a < b){

return 0;

}else if(a > b){

return 1;

}

return -1;

}

//]]>

3、 尽量将javascript放到文件中的优点:

(1)、可维护性(放到单独的js文件中更加易于维护)

(2)、可缓存(浏览器可以根据设置缓存js文件)

(3)、可适应未来(通过文件引用的方式无需使用前面提到的XHTML或注释的hack)

4、所有的javascript元素会按照他们在页面中出现的先后顺序依次被解析。只有解析完前面的代码之后,才会解析后面js元素中的代码。

第三章、基本概念

1、Javascript中一切变量、函数名和操作符都区分大小写。

2、ECMAScript具有5种简单数据类型:Undefined、Null、Boolean、Number、String还有一种复杂数据类型:Object。ECMAScript没有为整数和浮点数分别定义不同的数据类型,Number类型可用于表示所有的数值。

3、typeof用于检测一个变量的数据类型,返回的是字符串:”undefined”, “string”, ”boolean”,”number”,”object”, ”function”

4、浮点数存在浮点数陷阱,其精度不如整数准确。Number.MIN_VALUE Number.MAX_VALUE 如果某个计算的结果超过了Javascript的范围,那么被转换成特殊的Infinity值(负数是-Infinity),该值无法参与下一步的计算。要想确定一个数是不是欧诺个的,可以使用isFinite()函数

5、NaN是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作却未返回数值的情况。NaN有两个特点:1、任何涉及NaN的操作都会返回NaN . 2、NaN与任何值都不相等,包括自身。IsNaN函数用于检查一个参数是否是一NaN。

6、有三个函数可以把非数值类型转化为数值类型:Number(),parseInt ,parseFloat

7、Object类型。Object的每个实例都具有下列属性和方法:

(1)constructor:保存着创建当前对象的函数

(2)、hasOwnProperty(): 用于检查当前的属性在当前对象实例中是否存在(而不是实例的原型中)。

(3)、isPrototypeOf(object)检查一个对象是否是另一个对象的原型。TODO:深入理解原型

(4)、toString() 返回对象的字符串表示

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

(6)、ECMAScript函数没有重载,如果定义了两个相同的函数,那么改名字只属于后定义的函数

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

1、基本类型和引用类型:基本类型值是指保存在栈内存中的简单数据段,引用类型值则是保存在堆内存中的对象,变量中保存的实际上是一个指针,这个指针指向内存中的另一个位置。该位置保存对象。只能给引用类型的值添加属性。

2、基本类型值在复制时产生一个copy, 而引用类型的值在复制时,新值和之前的值都指向同一个对象。

3、ECMAScript中所有函数的参数都是按值传递的。

4、对于基本类型的检测可以使用typeof函数,对于引用类型的值,可以配合instanceof检测。根据规定,所有的引用类型都是Object的实例,因此检测一个引用变量是否instanceof Object时,总是返回true.

5、执行环境(execute context)与作用域:

执行环境定义了变量或者函数有权访问的其他数据,决定了它们的行为。每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。

执行环境有全局执行环境函数执行环境之分。

全局环境只能访问在全局环境中定义的变量和函数、而不能访问在局部环境中定义的任何数据。

局部执行环境不仅有权访问函数作用域中的变量,而且有权访问其父环境,乃至全局变量

每个函数在被调用时都会创建自己的执行环境,执行流进入一个函数时,函数的环境被推入环境栈中,而在函数执行完毕之后,栈将环境弹出,把控制权返回给之前的执行环境。

代码在一个环境中执行时,会创建由变量对象构成的一个作用域链。作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。

标识符解析的过程是验证作用域链一级一级搜索标识符的过程,搜索过程始终从作用域链的前端开始,然后逐级向后回溯,直到找到标识符为止。

6、延长作用域链

(1)try-catch语句的catch块

(2)with语句

7、在使用var关键字声明变量时,这个变量自动被添加到距离最近的可用环境中。如果变量在未经声明的情况下被初始化,那么该变量被自动添加到全局变量(这种方法并不推荐,容易造成错误和困扰)。

8、垃圾收集机制。

Javascript具有自动垃圾回收机制,执行环境会负责管理代码执行过程中使用的内存。这种垃圾收集机制的原理比较简单:找出那些不再继续使用的内存,然后释放其占用的内存

(1)、标记清除

Javascript中最常使用的垃圾收集方式是标记清除。当变量进入环境时,将变量标志为“进入环境”,当变量离开环境时,就将变量标记为“离开环境”。垃圾收集器在运行的时候会给存储在内存中的变量都加上标志,然后去掉环境中的变量和被环境中变量引用的变量的标志,在这之后仍然带有标志的变量将被视为准备删除的变量。

(2)、引用计数

另一个不太常见的垃圾收集策略是“引用计数”,通过追踪某个变量的引用次数来判断是否是垃圾。引用计数的问题在于“循环引用”的垃圾无法清除。例如:

function problem(){

varobj1 = new Object();

varobj2 = new Object();

obj1.aobj= obj2;

obj2.aobj= obj1;

}

为了避免类似的循环引用问题,最好在不使用它们的时候手工断开连接。

9、垃圾收集器的性能问题。Javascript内存管理问题。

确保占用最少的内存可以让页面获取更好的性能,而优化内存占用的最佳方式,就是为执行中的代码只保存必要的数据,一旦数据不再使用,应该将其值设置为null来释放其引用(解除引用)。解除引用并不意味着自动回收该值所占的内存。解除引用的真正作用在于让值脱离执行环境,以便垃圾收集器下次运行时将其回收。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: