【1】JavaScript编程全解笔记(一)

1.概述

本书涵盖了 JavaScript 各个方面的主题,从客户端以及服务端 JavaScript 等基础内容,主要讲了  HTML五、Web API、Node.js 与 WebSocket 等技术。正则表达式

本书前半部分对 JavaScript 基础进行解说。编程

本书后半部分主要介绍包括客户端 JavaScript、HTML五、Web API 以及服务器 JavaScript 等与 JavaScript 相关的应用领域。数组

 

第一章 JavaScript 基础

1. 宿主对象:理解为其余设计语言的外部库的概念,也就是语言中能够更换的部分。(PS: 就比如我到一家公司,老板是个人宿主,我换另一家公司,另一个老板又变成了个人宿主。)服务器

 

2. Web 应用程序的组成构造:闭包

 

 

第二章 JavaScript 语言基础

2.1 JS 的特色

1. 解释型语言:解释型语言直接在运行环境中执行代码。app

2. 相似于 C 和 Java 的语法结构函数式编程

3. 动态语言:动态语言的变量和函数是不指定返回值类型的。函数

4. 基于原型的面向对象this

5. 字面量的表现能力spa

6. 函数式编程:JS具有了匿名函数,能够把函数做为对象来使用,因此同时也可以支持函数式编程。

 

2.2 变量的基础

1. 变量的做用是给某一个值或对象标注名称

2. JS 中没有变量的类型,由于没有变量类型,因此对于同一个变量,既能够是字符串,也能够是数字。像下面这样 

3. 被声明但未进行任何赋值的变量,其值是 undefined

4. 省略 var, 好比:foo = 3; 这样的变量被称为隐式声明变量,采用隐式声明变量都是全局变量函数外部经过 var 声明的变量也是全局变量。( 避免使用隐式变量 )。

5. 常量 声明常量使用关键字 const 

 

2.3 函数基础

1. 函数是由一连串的子程序(语句的集合)所组成的,能够被外部程序调用,向函数传递参数以后,函数能够返回必定的值。函数也是一种对象

2. 函数的语法:函数以关键字 function 开始, 其后面跟有函数名、参数列表和函数体。

 

 

3. 函数声明时没必要指定形参的类型,任何类型均可以做为实参传递,此外,形参的数量和实参的数量能够不一致。 

   

4. 匿名函数:匿名函数的返回值是一个 Function 对象的引用。

 

 

2.4 对象的基础

1.  JS 中的对象是一个名称与值配对的集合,这种名称与值配对被称为属性。这样一来,JS 对象能够定义为属性的集合

2. 能够经过对象字面量表达式来生成一个对象

 

 

3. 属性的访问能够经过运算符 ( . )( [] ) 访问 。

 

4. 能够把任意类型的值、对象或者函数赋值给对象的属性

 

2.5 数组的基础

1. JS 中,数组用于表达有顺序关系的值的集合的语言结构。JS 中数组并不是是一种内建类型。

 

第三章 JavaScript 数据类型

3.1 数据类型的定义

1. JS 中有 5 种基本数据类型, 5 种数据类型以外的都被称为 Object 类型。

  1. 字符串型 ( String )

  2. 数值型 ( Number )

  3. 布尔型 ( Boolean )

  4. null 型

  5. undefined 型

      基本数据类型的实例被称为 ' 值 ',  Object 类型的实例被称为 "  对象 "

 

2.  JS 中值和对象具备数据类型,而变量没有数据类型。由于 JS 中的变量不具备数据类型,因此能够对其赋任意类型的值,也可使其引用任意类型的对象。

  因此 JS 被称为动态数据类型语言。

 

3. JS 是基于原型的编程风格,所谓类型也就是行为方式上的共性。因为每一个对象都具备共同的行为方式,因此可使用原型对象。 

 

3.2 基本数据类型和引用类型

1. 基本数据类型变量直接保存有数值等类型的数据值,而引用类型变量则保存有对象的引用。

 

3.3 字符串型

1.  字符串的比较,JS 中有两种等值运算符,即 === 和 ==。二者的区别在于,比较的时候是否会进行数据类型的转换。=== 不会对数据类型进行转换。

2. 字符串类 ( String 类 ), JS 中除了内建类型的字符串以外,还存在一个字符串类。大体至关于 Java 中数值型和包装类型( Integer ) 的关系。

3. 字符串型和 String 类之间也一样支持隐式类型转换

4. 字符串对象,可使用 new 运算符,来显示的生成一个字符串对象。 var sobj = new String('abc');

5. == 会进行隐式的转换。

 

6. 合理的运用字符串的隐式转换。

  

7.  调用 String 函数

8. String 类的函数以及构造函数调用

 

3.4 数值型

1. JS 中全部的数值都是 浮点小数

2. 浮点数的一些例子

 

3. 相似于 String 类,JS 中也存在数值类 ( Number类 )

 

3.5 布尔型

 

 

3.6 null 型

1. null 型只可以取 null 这一个值,null 值是一个字面量。

 

3.7 undefined 型

1. undefined 型只能取 undefined 这一个值。

 

 

 

3.8 Object 类型

1. 从字符串转换成数值,一般的作法是使用 Number 函数、parseInt 函数、parseFloat 函数。

 

 

2. 字符串到数值的隐式数据类型转换

 

3. ' + ' 号运算符在单目运算的状况下则是正号运算,好比 +'100' 转换成 数值 100

 

4. 惯用的数据类型转换

 

5. boolean 的隐式类型转换, 除了如下类型转换后结果为 false 值之外,其余的都是 true

 

6. 使用双重 !! 进行隐式转换为 boolean 类型。

 

7. Object 类型在被转换为布尔型以后结果一定为 true

 

8. 经过函数调用方式得到的结果就再也不是 Object 类型,而是相应的内建类型了。

 

第四章 语句、表达式和运算符

4.1 标识符

1. 习惯上,如下划线( _ ) 开始的标识符被做为 " 内部标识符 " 来使用, 好比: _calcNum, _name。

 

4.2 字面量

1. 字面量 ( literal ) 指的是,在代码中写下这些值后,将会在运行时直接使用这些值的字面含义。

2. if... else ...

3. switch -case: switch 括号内的表达式能够是任意类型。case 标签中也能够写任意类型。switch 括号内的表达式,与

 case 标签中所写的各个表达式,依次经过相等运算符(===)进行比较。

4. JS 中有 5 种循环语句。

 while(条件表达式) {  }

 do ... while ( 条件表达式 )

   for( 初始化表达式; 条件表达式; 更新表达式 ) {  }

   for in () 

   for each ( 表达式 in 对象表达式 )  非 ( ECMAScript 标准功能 )    

5. 表达式:即由运算符和操做数链接而成的式子。

 

第五章 变量与对象

5.1 变量的声明

1. 变量声明的习惯用法:var a = a || 1; 

上面 var a = a || 1; 方式的由来,请看下图。

 

2. 变量又分为基本类型的变量和引用类型的变量。

 

 

3. 构造函数: 构造函数老是以 new 表达式调用,首字母大写( 如:MyClass ), 构造函数在最后会隐式的执行 return this 操做。

    不建议在构造函数内使用 return 语句。

4. 属性的访问:能够经过运算符 (.) 或中括号 ([]) 来访问,须要注意的是,点运算符以后书写的属性名会被认为是标识符,而中括号运算符内的则

   被转换为 字符串值的式子

 

5. 属性的枚举: 能够经过 for in 语句对属性名进行枚举,在经过 for in 语句中使用中括号运算符,能够间接的实现对属性值的枚举。

 

6. 属性的属性

 

7. 实现不可变对象的方式

1. Object.preventExtensions(obj);

2. Object.seal 

3. Object.freeze

 

8. this

1. this 引用规则

2. this 的注意点

    1. 方法的调用的注意点

 

2. 在方法内部调用方法的状况

3. apply 与 call 的区别:不一样之处在于二者对其参数的传递方式,apply 剩余的参数使用 数组 来传递, 而 call 是直接按原样传递形参。

 

9. 原型继承

 

10. 原型链

属性读取实例

 

在读取属性的时候,将首先查找自身的属性。若是没有找到,则会进一步查找对象 MyClass 的 prototype 对象的属性。这就是原型链的基本原理。

 

原型属性写入操做

 

11. 鸭子类型判断

判断对象中含有哪些属性,是比 instanceof 运算更为广泛的类型判断方式。这种直接分析对象的操做以判断其类型的方法俗称为鸭子类型判断。

" in " 运算是一种能够用于判断鸭子类型的方法。

 

12. Object 类

 1. Object.create() 是除了对象字面量与 new 表达式以外的第三种官方的对象生成方法。

 

 

13. 标准对象 

14. Object 类

15. 全局对象和全局变量

16. Math 对象

 

17. Error 对象

 

第六章 函数与闭包

1. Arguments 对象

 

2. 递归函数

使用递归函数的注意点:必须在递归函数内部设置执行的中止条件判断,这称为终止条件。终止条件的代码并不必定非要写在递归函数的头部,写在头部便于阅读

 

3. 做用域

 

4. 函数也是一种对象

 

5. 闭包

闭包的前提条件是须要在函数声明的内部声明另外一个函数 ( 即嵌套的函数声明 )。 

闭包是具备状态的函数。

 

6. 为何要使用模块?

JS 的程序代码即便被分割为多个源文件以后,也能相互访问其全局名称。致使了牵一发而全身动,维护成本过高

解决方案

1. 避免使用全局变量

2. 经过闭包实现信息隐藏

 

语法: (function() { 函数体 })() 

 

 

第七章 数据处理

1. 数组:数组是一种有序的元素集合。在 JS 中,数组的长度是可变的。只要将元素加入到数组的尾部,数组的长度就会自动增加。同时,也可以自由改写数组

中的每个元素。

2. 数组的生成方式:数组能够经过字面量与 new 表达式两种方法生成。

3. 在 JS 中咱们一般先生成一个长度为 0 的数组,以后再向其中添加元素。

4. 不须要确保数组中元素类型的一致性。能够将任意的值或者对象的引用指定为元素。

 

5. 借助 arr.length 向数组的末尾添加元素是一种习惯用法。

6. 遍历数组

 

虽然经过 for in 语句或 for each in 语句也能够枚举数组元素,但他们没法保证枚举的顺序。若是须要确保枚举定期望顺序进行,请使用 for 语句。 

7. forEach

8. 多维数组

9. 数组也是一种对象,它是 Array 对象 ( Array类 ) 的对象实例。

 

10. 经过数组字面量表达式生成的数组也是 Array 的实例对象。

11. Array 类

Array 类的函数以及构造函数

 

Array 类的属性

 

Array.prototype  对象的属性

 

Array 类实例的属性

 

12.  数组排序

 

sort 方法在调换元素时会对这一数组进行改变。改写目标对象的方法被称为破坏性的方法。 JS 中,数组含有不少破坏性的方法。如下都是破坏性方法

pop, push, reverse, shift, sort, splice, unshift 

13. 经过数组来生成字符串

14. 数组的复制

复制数组使用 concat 和 slice 对数组进行复制

15. 深复制和浅复制

 

16. 数组元素的删除 splice 

17. 筛选处理

18. 数组的内部实现

19. 迭代器

20. JSON

JSON 可以经过 4 种基本数据类型以及 2 种结构化数据类型来表示。 

4 种基本数据类型是指字符串,数值,布尔以及 null 型。结构化数据类型是指对象与数据这两种。

 

21. 日期处理

22. 正则表达式:  正则表达式是一种适用于字符串的模式匹配的语言。

 

正则表达式的例子

 

使用全局旗标

 

严格模式

 

操做小技巧

1. 声明变量: var a = a || 0;

2. 向数组末尾添加元素: arr[arr.length] = 'last';

3. 定义模块: 

// 减小全局变量引起的冲突
var MyModel = {
      a: 2,
      b: 3,
      sum: function(){
          console.log('hello');
   }
}

4. 遍历数组

    1. 数组.forEach( 数组元素, 下标, 数组对象 );

    arr.forEach( e, i, a );  

    2. for in: for ( var n in arr ); 

 

 

ing!!!

相关文章
相关标签/搜索