JS高程知识点总结-5(引用类型)

一、对象类型
1、js中访问对象属性时一般用点表示法,还可以使用方括号表示法,使用方括号时,要访问的属性要使用字符串的形式;
alert(preson.name);
alert(person[“name”]);
方括号的优势在于可以使用变量访问属性;
var personName = “name”;
alert(parson[personName]);
其次,如果属性名中包含会导致语法错误的字符,或者使用的是关键字和保留字,也可以使用方括号;
person[“first name”] = “zhangsan”;//属性名包含空格,不能使用点表示法;

二、数组类型
2、js中数组特点:数组每一项可以保存任意类型的数据;数组大小可以动态调整;
创建方法与对象类似:构造函数法(new 可省略)和字面量法;
数组的length属性不是只读的,可以通过修改length来添加和删除数组项;
3、数组检测问题:
当只存在一个全局环境的时候,使用instanceof;
(value instanceof Array)
如果存在两个以上不同的全局执行环境,,因为有不同的Array构造函数,所以无法检测;
ES5新增 Array.isArray方法,不管全局执行环境的区别;
Array.isArray(value);
4、数组转换方法:
toString()、valueOf()、toLocaleString() => 返回以逗号分隔包含数组每一项(字符串形式)的字符串;
join(”|| “) => 用特定的分隔符号(“||”)分隔的字符串;
5、栈方法(LIFO):
push(): 接收任意数量的参数,返回修改后的数组长度;
pop(): 移除数组最后一项,返回移除的项;
6、模拟队列方法(FIFO):
shift():移除数组第一个项并返回该项,同时将数组长度减一;
shift() + push() => 模拟队列;
unshift():在数组前端添加任意个项并返回新数组的长度;
unshift() + pop() => 从相反的方向模拟队列;
7、重排序方法:
reverse():反转数组项的顺序,返回排序后数组;
sort():对数组做升序排序,返回排序后数组;但是由于其会对每个数组项调用tostring()方法,因此比较的是字符串
也就是 10 会排在5后面;
要做正确排序,需要在sort()中加入一个比减函数做参数;
8、数组操作方法:
concat():创建当前数组的副本,将接收到的参数添加到副本的末尾,并返回这个副本,不影响原数组;
slice():分割数组,接收一到两个参数,不影响原数组;
1个参数:返回从参数位置到数组末尾的所有项;
2个参数:返回起始位置到结束位置间的项,不包括结束位置;
若接收到的是负数,则从数组末尾开始计算,最后一项位置看做‘-1’;
splice():实现删除,插入,替换的功能,影响原数组,返回删除的项构成的数组;
2个参数:指定要删除的第一项的位置与删除的项数,splice(0,2)=> 表示删除前两项;
3个参数:若第2个参数为0,表示插入,splice(2,0,‘red’,’green’)=>从位置2 开始,插入两个字符串;
若第2个参数不为0,表示删除,splice(2,1,‘red’,’green’)=>从位置2 开始,删除1项,并从该位置开始插入两个字符串;
9、位置方法(查找):
indexOf():正向查找;lastIndexOf():反向查找;
接收两个参数,要查找的项和查找起点的索引,采用全等(“===”)查找,,若找到则返回其位置,未找到返回-1;
10、迭代方法(遍历):接收一个要在每一项上运行的函数和函数运行作用域对象(修改this),
传入的函数接收3个参数:数组项的值、位置、数组本身;
every():数组每一项都返回true,则返回true;
some():数组任一项返回true,则返回true;
filter():返回所有为true的项组成的数组;
map():返回每一项做操作后的结果组成的数组;
forEach():无返回值,类似for循环;
11、归并方法(求和):接收一个运行函数和归并起始值,归并第一次迭代发生在数组第2项上;
传入的函数接收5个参数:前一个值、当前值、当前位置、数组本身;
reduce():正向、reduceRight():反向;

三、Date类型
1、采用构造函数法创建日期对象,返回的都是本地时间,new Date()参数必须是表示日期的毫秒数
Date构造函数,会根据参数形式隐式调用下列函数,这两个函数返回对应日期的毫秒数:
Date.parse():参数可以为:“6/22/2017”、“july 13,2017”、“YYYY-MM-DDTHH:mm:ss:zzZ”以及具体时区日期;
Date.UTC():参数为(年,月,日,时,分,秒),年与月必需,其余可选,月从0 开始,小时为0到23;
ES5添加了Date.now()方法,返回当前时间的毫秒数;
2、继承方法:
toString()、toLocaleString() => 按照浏览器设置的地区返回对应的时间与日期,一般做调试用;
valueOf():返回时间的毫秒数;
3、日期格式化方法:以下将日期格式以特定的方式转化为字符串的方法,均与浏览器有关,因此无法显示一致的格式;
toDateString()、toTimeString()、toLocaleDateString()、toLocaleTimeString()、toUTCString()
4、常用时间方法:
getTime():获取毫秒数、getFullYear()、getMonth():从0开始、getDate():1到31、getDay():0-6,0为星期天、
getHours()、getMinutes()、getSeconds()

四、RegExp类型
1、字面量方法: var exp = /pattern/flags ; flags有三类:g(全局匹配)、i(忽略大小写)、m(多行匹配);元字符必须转义;
new RegExp()方法:接收要匹配的字符串模式与匹配标志,均以字符串形式传入,因此元字符要双重转义;
字面量方法生成的正则表达式会共享同一个RegExp实例,构造函数创建的都是新实例;
ES5规定,使用字面量法也必须要创建新实例;(详见《js高程》P104)
2、RegExp实例属性:global、ignoreCase、lastIndex:下一次匹配开始位置、multiline、
source:返回正则表达式的字符串表示,包括标志位(输出字面量形式的正则);
3、RegExp实例方法:
exec():返回数组,第一项为匹配字符串,其余项为与捕获组匹配的字符串;exec()仍然只返回一个匹配项,
添加g标志,则lastIndex值会变化,多次调用exec方法,会继续查找,否则lastIndex始终为0,始终返回第一个匹配项;
text():查找是否匹配,匹配则返回true,否则返回false;
RegExp实例继承的toString()、toLocaleString()返回正则的字面量,与source一致;

五、Function类型
1、js中函数实际上是一个对象,是Function类型的实例,函数名是指针,因此js中不存在函数重载;;
3种函数定义方法:函数声明、函数表达式、构造函数(接收任意数量的参数,最后一个为函数体,前面的为函数参数);
2、函数声明与函数表达式的唯一区别在于,函数声明会提升,因此可以先使用再声明;
3、函数内部包含两个特殊的对象:
arguments对象:包含所有传入的参数,其内部的callee属性是一个指向拥有该arguments对象的函数的指针;
this对象:函数当前的执行环境;
ES5规范化了函数对象的caller属性,它保存着调用当前函数的函数的引用;
严格模式下,callee属性和caller属性都会报错;
4、函数属性与方法
属性:length:函数参数个数;prototype:保存函数的所有实例方法;
方法:
apply():接收this 以及数组或者arguments对象类型的参数;
call():与apply类似,只不过参数要一个个直接传递给函数;
ES5新增bind()方法,用于创建新实例,改变函数的this;

六、基本包装类型
1、基本包装类型与引用类型的唯一区别在于生命周期,基本包装类型只存在于一行代码的执行瞬间;
instanceOf 测试基本包装类型,返回object;
Number类型的格式化方法:
toFixed():接收显示小数的位数;toExponential():返回指数形式的数据,接收参数表示小数位数;
toPrecision():接收参数表示所有数字的位数,会根据具体情况返回小数格式或者指数格式;
重写toString()、toLocaleString()、valueOf()方法,返回对应的值;
2、String类型的方法
charAt(1):返回对应位置的字符;
charCodeAt(1):返回对应位置字符的编码;
concat():字符串拼接;
slice(2,6)\substring()\substr():返回指定区间的所有字符;
indexOf()、lastIndexOf():返回字符位置;
trim():创建字符串副本,删除前置与后缀空格,并返回;
toLowerCase()/toLocaleLowerCase()/toUpperCase()/toLocaleUpperCase():大小写转换;
模式匹配方法:
match():与RegExp的exec()用法一致,接收一个参数(正则表达式或者RegExp对象),返回数组;
search():参数与match一致,返回匹配字符串的位置,未找到返回-1;
replace():替换子字符串,传入两个参数,第一个参数如果为字符串,则只提换第一个子字符串,
要全部替换,则第一个参数应该为正则表达式且加上’g’标志;第二个参数为替换文本(字符串或者函数);
split():指定分隔符将字符串进行分割,第一个参数为分隔符,第二个指定数组大小(可选);
localeCompare():比较字符串与参数,字符串在参数前面,返回负数;相等返回0;否则返回正数;
String构造函数的静态方法:fromCharCode():接受字符的编码,返回字符;

七、单体内置对象:在程序执行前就已经存在的不依赖宿主环境的对象
Array、Object、String、Global、Math
1、Global对象(无法直接访问)的方法:
encodeURI():对整个URI中空格进行替换(%20);
encodeURIComponent():对URI的某一段进行编码,替换所有的非数字字母的字符;
decodeURI()、decodeURIComponent()对应的解码方法;
eval():解析字符串,严格模式下报错;
所有原生引用类型的构造函数,以及NaN/underfined等特殊值,都是Global对象的属性;
Web浏览器将Global对象看做window对象的一部分
2、Math对象
属性:一些特殊值:Math.E、Math.PI等;
方法:
min()、max()、ceil():向上取整;floor():向下;round():四舍五入;
random():返回0-1直接的随机数,适用于设置一个区间数;
abs()、log()、exp()等等等等,