学习笔记:《JavaScript高级程序设计》

第1章 JavaScript简介编程

1.一个完整的JavaScript实现应该由三部分组成:核心(ECMAScript),文档对象模型(DOM)和浏览器对象模型(BOM)。数组

2.Web浏览器只是ECMAScript实现可能的宿主环境之一。宿主环境不只提供基本的ECMAScript实现,同时也会提供该语言的扩展,以便语言与环境之间对接交互。而这些扩展——如DOM,则利用ECMAScript的核心类型和语法提供更多更具体的功能,以便实现针对环境的操做。其余宿主环境包括Node(一种服务端JavaScript平台)。浏览器

3.DOM也是应用编程接口(API)。数据结构

 

第2章 在HTML中使用JavaScriptdom

1.带有src属性的<script>元素不该该在其<script>和</script>标签之间再包含额外的JavaScript代码。函数

 

第3章 基本概念性能

1.若是在函数中使用var定义一个变量,那么这个变量在函数推出后就会被销毁。测试

2.虽然省略var操做符能够定义全局变量,但这不是咱们推荐的作法。优化

3.ECMAScript中有5种简单数据类型(也成为基本数据类型):Undefined、Null、Boolean、Number和String。还有1种复杂数据类型——Object,Object本质上是由一组无序的名值对组成的。Object类型不等于对象。ECMAScript种对象其实就是一组数据和功能的集合。this

4.包含undefined值的变量与还没有定义的变量仍是不同的。对于后者,只能执行一项操做,即用typeof操做符检测其数据类型。

5.只要意在保存对象的变量尚未真正保存对象,就应该明确地让该变量保存null值。

6.永远不要测试某个特定的浮点数值(即像这样:a + b === 0.3)。

7.parseInt():不指定基数意味着让parseInt()决定如何解析输入的字符串,所以为了不错误的解析,咱们建议不管在什么状况下都明确指定基数。

8.按位非操做的本质:操做数的负值减1。虽荣用一元减操做符和加法操做符也能实现一样的效果,但因为按位非是在数值表示的最底层执行操做,所以速度更快。

9.咱们能够利用逻辑或的短路行为来为变量赋值提供后备值,以免为变量赋null或undefined值。

10.忽视加法操做中的数据类型是ECMAScript编程中最多见的一个错误(好比用字符串和数值相加,数值会先被转换成字符串)。

11.若有有一个操做数是NaN,则相等操做符返回false。即便两个操做数都是NaN,相等操做符也返回false;由于按照规则,NaN不等于NaN。

12.因为相等和不相等操做符存在类型转换问题,而为了保持代码中数据类型的完整性,咱们推荐使用全等和不全等操做符。

13.咱们建议若是使用label语句,必定要使用描述性的标签,同时不要嵌套过多的循环。

14.在函数体内能够经过arguments对象来访问参数数组,从而获取传递给函数的每个参数。

15.ECMAScript函数有一个重要特色:命名的参数只提供便利,但不是必需的。

16.经过访问arguments对象的length属性能够获知有多少个参数传递给了函数。开发人员能够利用这一点让函数可以接收任意个参数并分别实现适当的功能。虽然这个特性算不上完美的重载,但也足够弥补ECMAScript的这一缺憾了。

17.函数:没有传递值的命名参数将自动被赋予undefined值。这就跟定义了变量但又没有初始化同样。

18.ECMAScript中的全部参数传递的都是值,不可能经过引用传递参数。

 

第4章 变量、做用域和内存问题

1.当从一个变量向另外一个变量复制引用类型的值时,和复制基本类型的值同样,也会将存储在变量对象中的值复制一份放到为新变量分配的空间中。不一样的是,这个值的副本其实是一个指针,两个变量实际上将引用同一个对象。即基本类型的值是按值按值访问的,引用类型的值是按引用访问的。

2.ECMAScript中全部函数的参数都是按值传递的。

3.执行环境(execution context,有时也称为“环境”或“做用域”)是JavaScript中最为重要的一个概念。执行环境的类型总共只有两种——全局和局部(函数)。

4.JavaScript没有块级做用域。在其余类C的语言中,由花括号封闭的代码块都有本身的做用域(用ECMAScript的话来说,就是它们本身的执行环境)。

5.确保占用最少的内存可让页面得到更好的性能。而优化内存占用的最佳方式,就是为执行中的代码只保存必要的数据。一旦数据再也不有用,最好经过将其值设置为null来释放其引用——这个作法叫作接触引用(dereferencing)。这一作法适用于大多数全局变量和全局对象的属性。局部变量会在它们离开执行环境时自动被解除引用。

 

 

第5章 引用类型

1.引用类型的值(对象)是引用类型的一个实例。在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一块儿。它也常被称为类,但这种称呼并不稳当。

2.对象字面量是向函数传递大量可选参数的首选方式。通常来说,命名参数虽然容易处理,但在有多个可选参数的状况下就会显得不够灵活。最好的作法是对那些必需值使用命名参数,而使用对象字面量来封装多个可选参数。

3.一般,除非必须使用变量来访问对象的属性,不然咱们建议使用点表示法而不是方括号表示法。

4.使用不带圆括号的函数名是访问函数指针,而非调用函数。

5.this引用的是函数执行的环境对象。在调用函数以前,this的值并不肯定。

6.必定要牢记,函数的名字仅仅是一个包含指针的变量而已。

7.对于ECMAScript中的引用类型而言,prototype属性是保存它们全部实例方法的真正所在。换句话说,注入toString()和valueOf()等方法实际上都保存在prototype名下,只不过是经过各自对象的实例访问罢了。

8.每一个函数继承的toLocaleString()和toString()方法始终都返回函数的代码(在调试代码时颇有用)。

9.基本类型值不是对象(引用类型值才是),于是从逻辑上讲它们不该该有方法,但从表面上看它们确实有方法。实际上,每当读取一个基本类型值的时候,后台就会建立一个对应的基本包装类型(特殊的引用类型,包括Boolean、Number和String),从而让咱们可以调用一些方法来操做这些数据。

10.静态方法:只能被构造函数自己调用,而不能被实例调用。实例方法反之。

11.Global(全局)对象能够说是ECMAScript中最特别的一个对象了,由于无论你从什么角度上看,这个对象都是不存在的。ECMAScript中的Global对象在某种意义上是做为一个终极的“兜底儿对象”来定义的。换句话说,不属于任何其余对象的属性和方法,最终都是它的属性和方法。事实上,没有全局变量或全局函数;全部在全局做用域中定义的属性和函数,都是Global对象的属性。ECMAScript虽然没有指出如何直接访问Global对象,但Web浏览器都是将这个全局对象做为window对象的一部分加以实现的。所以,在全局做用域中声明的全部变量和函数,就都成为了window对象的属性和方法。JavaScript中的window对象除了扮演ECMAScript规定的Global对象的角色外,还承担了不少别的任务。如下代码是取得Global对象的另外一种方法(末尾有一对括号表示是一个当即调用的函数表达式)。

var global = function() {

  return this;

} ();

12.Math.random()方法返回大于等于0小于1的一个随机数。套用下面的公式,就能够利用Math.random()从某个整数范围内随机选择一个值。

值 = Math.floor(Math.random() * 可能的值的总数 + 第一个可能的值)

13.函数其实是对象。每一个函数都是Function类型的实例,并且都与其余引用类型同样具备属性和方法。因为函数是对象,所以函数名其实是一个指向函数对象的指针。

14.函数一般是使用函数声明语法定义的,这与使用函数表达式定义函数的方式相差无几,最后一种定义函数的方式是使用Function构造函数(从技术的角度讲,这也是函数表达式)。

相关文章
相关标签/搜索