【有书共读】《JS高级程序设计》读书笔记01
1.第一章
- JavaScript包含三个部分,ECMAScript,DOM,BOM。ECMAScript是JavaScript的核心,包括语法,类型,语句,关键字,保留字,操作符,对象。
- 5种简单数据类型:Undefined、Null、Boolean、Number、String;
- 1种复杂数据类型(引用类型):Object。
- ECMAScript提供核心语言功能。DOM提供访问和操作网页内容的方法和接口。BOM提供与浏览器交互的方法和接口。
- 一个完整的JavaScript实现应该由三个不同的部分组成:核心(ECMAScript)、文档对象模型(DOM)、浏览器对象模型(BOM)。
2.第二章
- script标签位置:<body>元素中页面内容的最后面。
- defer延迟脚本:
<script defer="defer" src="example.js"></script>
- async异步脚本
<script async src="example1.js"></script>
3.第三章
语法、关键字、保留字、变量...(语法部分)
3.7 函数
- 使用function声明
3.7.1 理解参数
- 参数在内部使用数组表示的,函数接收到的始终都是这个数组。
- arguments是类数组对象
- 没有重载
4.第四章
4.1 基本类型和引用类型
- 基本类型:undefined,null,boolean,number,string
- 引用类型:object
- 参数只能按值传递
- typeof,instanceof检测类型
4.2 执行环境及作用域
- try-catch和with语句可延长作用域链
- 没有块级作用域
4.3 垃圾收集
- 具备自动垃圾收集机制
- 标记清楚:变量进入环境,将其标记为“进入环境”,离开环境将其标记为“离开环境”,垃圾收集器在运行时,给存储在内存中的所有变量加上标记,然后去掉环境中的变量,以及其引用的变量的标记,然后清楚带标记的变量,释放空间。
- 引用计数:跟踪记录每个值被引用的次数。被引用是加1,赋值时加1;反之,当其又取得另外的值,则引用减1。值为0时,对其回收。
- 管理内存:不用的引用置为null。
5.第五章
5.1 Object类型
- Object是一种基础类型,其他所有类型都从Object继承了基本的行为。
- 调用方式:a.obj,a.["obj"]
5.2 Arrary类型
- Array类型的每一项可以保存任何类型的数据。数组的大小是可以动态调整的。
- 数组的length属性有个特点——它不是只读的。
-
检验数组
方法一:value instanceof Array 方法二:Array.isArray(value)
-
转化方法:toString(),valueOf(),前者返回由数组中的每个值的字符串形式拼接而成的一个已逗号分隔的字符串。而后者还是返回的是一个数组。
- 重排序方法:reverse()和sort(),前者只是反转数组。后者只是对字符串进行排序。若想比较大下,还得接受一个比较函数作为参数。
- concat()方法可以基于当前数组中的所有项创建一个新数组。
- slice()可以基于当前数组中的一个或多个创建一个新数组。该函数接受一个或者两个参数,即要返回项的起始和结束位置。该方法返回起始和结束位置之间的项,但是不包括结束位置的项。
- splice()的功能很强大,可以实现数组中元素的删除,插入,替换。该方法接收两个或者三个参数,起始项的位置,要删除的个数,待插入的元素。
- ECMAScript5为数组实例添加两个位置方法:indeOf()和lastIndex(),前者从数组开头开始向后查找,后者从数组的末尾开始向前查找。这两个方法都接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。未找到的话返回-1。
- 迭代方法:
- every() 若该函数对每一项都返回true,则返回true
- filter() 返回该函数会返回true的项组成的数组
- forEach() 无返回值
- map() 返回每次函数调用的结果组成的数组
- some() 若该函数对某一项返回true,则返回true
- reduce()和reduceRight(),这两个函数接收四个参数:前一个值,当前值,项的索引和数组对象。
- 栈方法:push,pop
- 队列方法:unshift,shift
- 重排序方法:sort,reverse
- 操作方法:
- slice:含头不含尾
- concat:连接数组
- splice:插入,删除,替换
- 位置方法:indexOf,lastIndexOf
5.3 Data类型
- var now = new Date();新创建的对象会自动获取当前的日期和时间。
- 如果想根据特定的日期和时间创建日期对象,必须传入该日期的毫秒数。Date.parse()和Date.UTC()可以实现。
- Date.now()返回表示调用这个方法时的日期和时间的毫秒数。
- 日期格式化方法
- toDateString() 以特定实现的格式显示星期几,月,日和年
- toTimeString() 以特定于实现的格式显示时,分,秒和时区
- toLocaleDateString() 以特定于地区的格式显示星期几,月,日和年
- toLocaleTimeString() 以特定于地区的格式显示时,分,秒和时区
5.4 RegExp类型
- g,i,m
- /*/
5.4.2实例方法
- exec():设置g时,每次调用exec都会在字符串中继续查找新的匹配项
5.5 Function类型
- 没有重载
- 声明与表达式
- 内部属性:arguments,this
- prototype,length
- apply,call
5.6 基本包装类型
- new
- 字符串大小写转换,toLowerCase(),toLocalLowerCase(),toUpperCase(),toLocalUpperCase()
- indexOf()和lastIndexOf()
- trim()
- Number类型方法
- toFixed
- toExponential
- toPrecision
- String类型方法
- charAt
- charCodeAt
- concat
- slice,substr,substring
- indexOf,lastIndexOf
- trim
- replace
5.7 单体内置对象
- Global对象
- encodeURI:不会对/等符号编码
- encodeURIComponent():对任何字符编码
- eval:完整的js解析器,不推荐使用
- window
- Math
- min,max,ceil,floor,random...