js第五章引用类型

5.2.6数组的操作方法:

concat():基于当前数组中的所有项创建一个新数组,返回的是新数组。
该方法会先创建当前数组的一个副本,然后将接收到的参数添加在这个副本的末尾,最后返回新构建的数组。

slice():选取数组部分项。
两参数,分别是要返回项的起始和结束位置。

splice():向数组的中部插入项。
splice(a,b):表示删除。a表示要删除的第一项的位置,b表示要删除的项数。
splice(a,0,b):表示插入。 a是插入的位置 b是插入的的字符串。
splice(a,c,b):表示替换。a起始位置,b要删除的项数,c要插入的任意数量的项。

5.2.7位置方法:

indexOf()和lastIndexOf():都接受两个参数。要查找的项和(可选的)表示查找起点位置的索引。

其中,indexOf()方法从数组的开头开始向后查找,lastIndexOf()方法则从数组的末尾开始向前查找。

两方法都是返回要查找的项在数组中的位置,或者没找到返回-1。

在比较第一个参数与数组中的每一项时,会使用全等操作符,也就是说,要求查找的项必须严格相等。

<———————————————>
5.2.8迭代方法:5个。
都接受两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象——影响this的值。

传入这些方法中的函数会接收三个参数:数组项的值item,该项在数组中的位置index和数组对象本身array。

对于数组中的每一项运行给定函数:
1.every():如果该函数对每一项都返回true,则返回true.

2.filter():该函数会返回true的项组成的数组。

3.forEach():这个函数没有返回值。

4.map():返回每次函数调用的结果组成的数组。

5.some():如果该函数对于任一项返回true,则返回true.

5.2.9缩小方法:reduce()和reduceRight()
都会迭代数组的所有项,然后构建一个最终返回的值。
reduce()从数组的第一项开始,逐个遍历到最后。
reduceRight()顺序相反。

它两除了遍历顺序,其他完全相同。

这两个方法都接受两个参数:一个在每一项上调用的函数和(可选的)作为缩小的初始值。

给reduce()和reduceRight()的函数接收4个参数:前一个值、当前值、项的索引 和 数组对象。
这个函数返回的任何值都会作为第一个参数自动传给下一项。

示例:求和

    var values = [1,2,3,4,5];
    var sum = values.reduce(function(prev,cur,index,array){
        return prev+cur;
    });
    alert(sum);//15

5.3Date类型
Date.parse()和Date.UTC():都返回日期的毫秒数。

Date.parse():接收一个表示日期的字符串参数,然后根据这个字符串返回相应日期的毫秒数。
如果该字符串不能表示日期,那它会返回NaN。

实际上,直接将表示日期的字符串传递给Date构造函数,也会在后台调用Date.parse()。

与Date.parse()不同的是,Date.UTC()在构建时使用不同的信息。
参数分别为n年、基于0的月份(1月是0,2月是1,以此类推)、月中的哪一天(1~31),小时(0~23)、分钟以及毫秒数。只有前两个是必填的,如果月中没有天数,默认是1,省略其他参数,系统统统默认是0。

es5中添加Date.now()方法,返回表示调用这个方法时的日期和时间的毫秒数。

支持的浏览器有IE9+、 Firefox3+、
Safari3+、Opera10.5和Chrome。

在不支持的浏览器中,使用+操作符将对象转换成字符串,也可达到目的。

var start = +new Date();

Date日期格式化方法:
toDateString();以特定于实现的格式显示星期几、月、日和年。

toTimeString():显示时分秒和时区。
略。。。

5.4 RegExp类型
表达式:
var expression = / pattern / flags;
pattern 简单的正则表达式
flags 标明正则表达式的行为。有三个:
g:全局模式
i:不区分大小写模式
m:多行模式

这三种模式可以组合使用。如:
var pattern = /[bc]at/gi;

5.4.1RegExp实例属性
global:布尔值,表示是否设置g标志。
ignoreCase:布尔值,表示是否设置了i标志。
lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起。
multiline:布尔值,表示是否设置了m标志。
source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。

这些属性可以获知一个正则表达式的各方面信息。
略。。。
<————————————————————->
5.5Function类型

函数实际上是对象。每个函数都是Function类型的实列,而且都与其他引用类型一样具有属性和方法。

由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。

函数使用函数声明语法定义。如下:
function sum(num1,num2){
return num1+num2;
}
等价于:
var sum = function(){
return num1+num2;
};//注意不要丢掉分号 该函数形式没有函数名

还有一种定义函数的方式:使用Function构造函数。Function构造函数可以接收任意数量的参数,但是最后一个参数始终被看成是函数体,而前面的参数则枚举出新函数的参数。示例:

var sum = new Function(“a”,”b”,”return a + b”);//不推荐,原因如下:
这种语法会导致解析两次代码:
第一次是解析常规ECMAScript代码,第二次是解析传入构造函数中的字符串。
从而影响性能。
该语法对于理解”函数是对象,函数名是指针”概念非常直观。
函数名是指针,即一个函数可能有多个名字。

5.5.1没有重载(深入理解)

同名函数 ,后者会覆盖前者。

5.5.2函数声明与函数表达式
区别:解析器在向执行环境中加载数据时,对数据声明和函数表达式并非一视同仁。
解析器会率先读取函数的声明,并使其在执行任何代码之前可用(可以访问);至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。

alert(sum(2,3));
function sum(a,b){return a+b;}

上面可以正常运行,因为在代码开始执行之前,解析器就已经通过一个名为函数声明提升的过程,读取并将函数声明添加到执行环境中。
对于代买求值时,js引擎在第一遍会声明函数并将它们放到源代码树的顶部。下面代码会在运行期间产生错误:

alert(sum(2,3));
var sum = function(a,b){return a+b;}

原因在于函数位于一个初始化语句中,而不是一个函数声明。换句话说,在执行到函数所在的语句之前,变量sum中不会保存有对函数的引用;而且,由于第一行代买就会导致”unexpected identifier”(意外标识符)错误,实际上也不会执行到下一行。

5.5.3作为值得函数
函数名本身就是变量,所以函数也可作为值来使用。也即是,不仅可以像传递参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另外一个函数的结果返回。

5.5.4函数内部属性
在函数内部,有两个特殊的对象;arguments和this
arguments是一个类数组对象,包含着传入函数中的所有参数。虽然它主要用途是保存函数参数,但它还有一个名叫callee的属性。该属性是一个指针,它指向拥有这个arguments对象的函数。
示例:
function factorial(num){
if(num<=1){
return 1;
} else{
return num*arguments.callee(num-1);//无论引用函数时使用的是什么名字,都可以保证正常完成递归调用。
}
}

this 引用的是函数执行的环境对象。当在网页的全局作用域中调用函数时,this对象引用的就是window。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值