第1章 JavaScript简介

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

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

3.DOM也是应用编程接口(API)。

第2章 在HTML中使用JavaScript

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

第3章 基本概念

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

2.虽然省略var操作符可以定义全局变量,但这不是我们推荐的做法。

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

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构造函数(从技术的角度讲,这也是函数表达式)。

学习笔记:《JavaScript高级程序设计》的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. 菜鸟级的Git与GitHub使用总结(转)

    菜鸟级的Git与GitHub使用总结 原创 2016年12月01日 14:58:30 1792 前言 这几天一直在折腾学习Git和GitHub的使用.几天下来,在网上查阅了大量的资料,总算有一些成果. ...

  2. 第四篇 express 安装esasticsearch

    1.首先,我们创建一个Express应用程序!我将使用express.js生成器. npm install -g express-generator express ./autocompleter c ...

  3. R: data.frame 生成、操作数组。重命名、增、删、改

    ################################################### 问题:生成.操作数据框   18.4.27 怎么生成数据框 data.frame.,,及其相关操 ...

  4. web特点

    1.图形化和易于导航的 Web是非常易于导航的,只需要从一个连接跳到另一个连接,就可以在各页各站点之间进行浏览了. 2.与平台无关 这里所说的平台是指软件的运行环境,可以是Windows.Linux等 ...

  5. jquery事件之事件委托和事件切换

    一.事件委托函数: 方法名 说明 语法 (events 事件类型,data数据,handler 事件处理函数,selector 选择器) live 用于为指定元素的一个或多个事件绑定事件处理函数. j ...

  6. neutron负载均衡高可用测试

    对工作中,实验环境的一个小总结 1.创建高可用负载均衡器------创建高可用的时候,添加上ha-mode参数即可 neutron lb-pool-create --lb-method ROUND_R ...

  7. CodeForces 124C【连通块】

    思路: a素数->b合数 c素数->b合数 a,c属于一类 so,预处理相同的,并且计数.1000怎么搞都无压力: 我这里也预处理了字母个数,从集合大的枚举下来,每次拿字母个数最多的去匹配 ...

  8. Complex复数类——课堂作业

    代码: #include<iostream> #include<cmath> using namespace std; class Complex { public: Comp ...

  9. 51nod1138(连续和)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1138 题意:中文题诶- 思路:假设 x=a1+(a1+1)+ ...

  10. C 语言实例 - 创建各类三角形图案

    C 语言实例 - 创建各类三角形图案 创建三角形图案. 实例 - 使用 * 号 #include <stdio.h> int main() { int i, j, rows; printf ...