2018-11-26红宝书第5章引用类型总结
2018-11-26 本文已影响3人
_CCoder
第五章 引用类型
- 新对象是使用new操作符后面跟一个构造函数来创建的,该函数出于创建新对象的目的而定义
5.1 Object类型
- 创建方法:1、new 后面跟构造函数;2、对象字面量
5.2 Array类型
- new Array(3)创建包含3项的数组
- 数组项省略或越界或访问超出数组长度的索引,没值的项都会保存undefined
- length属性不只是可读的,可以从数组的末尾移除项或添加新项
var colors = ["red","blue","green"];
colors[colors.length] = 'black';
- 当把一个值放在超出当前数组大小的位置上时,数组就会重新计算其长度值,即长度值等于最后一项索引+1
常用方法:
- Array.isArray()
- toString()创建一个数组值以逗号分隔的字符串
- join(),接收一个参数,使用不同分隔符构建拼接字符串,默认使用逗号
- 栈方法:
- push()方法接收任意数量的参数,逐个添加到数组末尾,返回修改后数组长度
- pop()方法移除末尾最后一项,减少length值,返回移除的项
- 队列方法:
- shift(),移除数组第一项并返回该项
- unshift("red","green"),能够在数组前端添加任意个项并返回新数组长度,多项的话从左向右推入
- 重排序方法:
- reverse() 方法反转数组
- sort() 默认按升序,比较的是字符串
- 比较数值或其他类型接收一个比较函数,接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个参数之后则返回一个正数
// 数值比较 function compare(value1,value2) { return value2- value1; // 降序 }
- 两个方法返回值都是排序之后的数组
- 操作方法:
- concat() 拼接数组,返回新数组
- slice() 接收1或2参数,返回数组切片,切片数组不包含第二个参数的索引位置。如果传入负数,则用该负数+数组长度确定位置,可以实现从后向前切片
- splice(起始位置,要删除的项数,(要插入的任意数量的项))
向数组中部插入项。始终返回一个数组,包含从原始数组删除的项
- 位置方法:
- indexOf,lastIndexOf(要查找的项,(查找起点位置索引))
前者从数组开头向后查找,后者反之,使用全等操作符比较
没有找到返回-1
- indexOf,lastIndexOf(要查找的项,(查找起点位置索引))
- 迭代方法:
- 每个方法接收两个参数1.在每一项上运行的函数,2.(可选)运行该函数的作用域对象,影响this值
- 传入的函数接收三个参数:1.数组项的值;2.索引;3.数组对象本身
- every() 该函数对每一项返回true,则返回true
- filter() 返回该函数会返回true项组成的数组
- forEach(),没返回值
- map(),返回每次函数调用的结果组成的数组
- some(). 如果该函数任一项返回true,则返回true
- 归并方法
- reduce() reduceRight(),前者从头返后遍历,后者反之
- 迭代所有项,构建一个最终返回的值
- 接收两个参数,每一项上调用的函数和(可选)作为归并基础的初始值
- 第一次迭代发生在数组第二项上,参数函数4个参数:前一个值,当前值,索引,数组对象。函数返回任何值都会作为第一参数自动传给下一项
5.3 Date类型
- Date.parse() 接收一个表示日期的字符串参数,返回相应日期毫秒数
- Date.UTC() 同样返回日期毫秒数,但接受的是多个数值参数,只有年和月,第1第2参数是必须的
- Date.now()
- toString(),toUTCString返回带有时区信息的日期和时间
- valueOf() 返回日期毫秒数
5.4RegExp类型
- 贪婪匹配
- g\i\m 三个标志,全局,区分大小写,多行模式
- 所有元字符都要转义
- 两种创建方式:1、字面量形式/.../gim;2、RegExp构造函数,两个参数,一个是要匹配的字符串模型,第二个是可选的标志字符串(要对\进行转义 -> \\)
实例属性
- lastIndex: 表示开始搜索下一个匹配项的字符位置
实例方法
- exec()
为捕获组设计,接收一个参数,即要应用模式的字符串,返回包含第一个匹配项信息的数组,没有匹配的情况下返回null。在数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串- 每次只返回一个匹配项,有g时多次调用exec都会在原字符串中继续查找新匹配项,没有g则始终返回第一个匹配项信息
- test()
接收一个字符串参数,在模式与该参数匹配的情况下返回true,否则返回false - toLocaleString(),toString()都会返回正则表达式字面量
构造函数属性
- RegExp.input/lastMatch/lastParen/leftContext/....
- ^和$表示匹配字符串的开头和结尾
5.5 Function类型
- 函数实际上是对象,是Function类型的实例
- 函数是对象,函数名是指针
函数声明与函数表达式
- 解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问)
- 函数表达式,则必须等到解析器执行到它所在的代码行
- 函数声明提升:即使声明函数的代码在调用它的代码后面,js引擎也能把函数声明提升到顶部
函数内部属性
- arguments主要用途是保存参数,但这个对象还有一个名叫callee的属性,是一个指针,指向拥有arguments对象的函数,即指向这个函数自己。在递归调用时可以解除函数名的耦合
- this 是调用函数的作用域,不是函数内部的作用域
this引用的是函数执行的环境对象,在全局执行就引用全局对象,在某一个对象内部调用,就引用的是这个对象 - 函数名只是一个包含指针的变量
- caller
这个属性保存着调用当前函数的函数的引用,即谁调用了这个函数就保存谁 - arguments.callee即函数自己,arguments.callee.caller即这个函数的调用者
函数属性和方法
- length :希望接收的命名参数个数
- prototype :保存对象所有实例方法的真正所在
- prototype不可枚举,for in 无法发现
- apply(this,参数数组)和call(this,参数1,参数2,...) ,用途都是在特定作用域中调用函数,实际上等于设置函数体内this对象的值
- call()和apply()作用相同,区别仅在于接收参数的方式不同
-
sayColor.call(obj)
相当于改变了函数内部this的值,this变成了obj - bind(),这个方法会创建一个函数实例,其this值会被绑定到传给bind()函数的值。
var objectSayColor = sayColor.bind(o); objectSaycolor()
基本包装类型
- 三个:Boolean,Number,String
- 直接访问基本类型的变量时,后台会创建一个实例,只存在于一行代码的执行瞬间,然后立即被销毁
- 每次访问都会创建一个新的实例
- 所有基本包装类型在转换为布尔值时都是true
Number类型
- toFixed() 方法,保留小数点位数
- toExponential() ,返回指数表示法(e表示法)
- toPrecision(表示数值所有数字位数) 根据数值自动判断格式
String类型
- 常用方法:
- charAt()、 charCodeAt()
- slice(),substr().substring()
都接受两个参数,第一个是子字符串开始的位置,第二个表示子字符串到哪里结束。substr(),第二个参数表示返回的字符个数 - indexOf(),lastIndexOf(),从一个字符串中搜索给定字符串,没找到返回-1,找到返回第一次出现索引位置
- match(),接收一个正则表达式或RegExp对象,与调用RegExp的exec()方法相同
- search(),返回第一个匹配项索引
- replace(正则或字符串,字符串或函数)
- split(),基于分隔符分隔子字符串,放到一个数组中返回
- localeCompare()
单体内置对象
Global对象
- 所有全局作用域中定义的变量和函数,都是global对象的属性
- encodeURI(),encodeURIComponent()
- decodeURI(),decodeURIComponent()
- 所有原生引用类型的构造函数,都是Global对象的属性
Math对象
- Math.min(),max(),一组数中最大最小值
- 求一个数组的最大最小值:Math.max.apply(Math,array);
- Math.ceil(),floor(),round(),
- Math.random(),返回大于等于0小于1的随机数
值 = Math.floor(Math.random() * 可能值的总数 + 第一个可能的值)