JavaScript高级程序设计第五章:引用类型

5.1 Object类型

对象是属性的无序集合,由键名和属性值组成

【键名】

  对象的所有键名都是字符串,所以加不加引号都可以,如果不是字符串也会自动转换成字符串

【属性值】

  属性值可以是任何类型的表达式,最终表达式的结果就是属性值的结果

http://www.cnblogs.com/xiaohuochai/p/5741616.html

5.2 Array类型

http://www.cnblogs.com/xiaohuochai/p/5679605.html

创建数组的基本方式有两种,使用Array构造函数和数组字面量。

数组的length属性很有特点,他不是只读的。通过设置这个属性,可以从数组的末尾移除项或向数组中添加新项。

var color = ["red","blue","green"];

color.length=2;//删除项

color[color.length]="black";//添加项

将数组清空的一个有效方法就是将length设为0

类数组:拥有length属性和对应非负整数属性的对象叫做类数组。

常见的三个类数组对象:arguments对象、DOM方法(如document.getElementsByTagName()方法)返回的对象、字符串

检测数组:对于一个全局作用域,instanceof()即可。如果网页中包含多个框架,则用Array.isArray()

数组的一些方法

1.栈方法:push()方法可以接收任意数量的参数,把他们逐个添加到数组末尾,并返回修改后数组的长度。

pop()方法则从数组的末尾移除最后一项,减少数组的length值,然后返回移除的项。

2.队列方法:shift()方法能够移除数组中的第一项并返回该项,同时将数组的长度减1。

unshift()方法与shift方法用途相反,它能在数组前端添加任意个项并返回新数组长度

3.重排序方法:reverse()方法反转数组原来的顺序

sort()方法按升序排列数组项,它会调用toString方法得到每一项的字符串进行比较,即使数组中的每一项都是数值。

所以会出现10>5的情况。因此,sort方法可以接收一个比较函数,比较函数接收两个参数,如果第一个参数应该位于第二个

之前返回负数,如果两个参数相等返回0,如果第一个参数应该位于第二个之后则返回一个正数。

4.操作方法:concat()方法能够基于当前数组中的项创建一个新数组,它会先创建当前数组的一个副本,然后将接受到的参数添加到这个数组的末尾,最后返回新构建的数组。在没有给该方法传递参数的情况下,它只是复制当前数组并返回副本。如果传递给concat的是一个或多个数组,则该方法

会将这些数组中的每一项都添加到结果数组中。如果传递的值不是数组,这些值就会被简单的添加到数组末尾。

slice()方法可以接收一个或两个参数,即要返回项的起始和结束位置。在只有一个参数的情况下,slice方法返回从该参数指定位置开始到末尾的所有项。如果有两个参数,该方法返回起始和结束位置之间的项(不包括结束位置的项)。

splice()方法是一个很强大的数组方法,使用这种方法的方式有以下三种。

删除:可以删除任意数量的项,只需指定2个参数:要删除的第一项位置和要删除的项数。

插入:可以向指定位置插入任意数量的项,只需传递三个参数:起始位置、0(要删除的项数)、要插入的项。

替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定3个参数:起始位置、要删除的项数、插入的项数不必与删除的相等。

splice方法会返回一个数组,该数组包含从原始数组中删除的项(如果没有删除任何项则返回一个空数组)

var color = ["red","green","blue"];
var removed = colors.splice(0,1);
alert(colors); //green,blue
alert(removed); //red

removed = colors.splice(1,0,"yellow","orange");
alert(colors); //green,yellow,orange,blue
alert(removed); //返回空数组

removed = colors.splice(1,1,"red","pink");
alert(colors); //green,red,pink,orange,blue
alert(removed); //yellow

5.位置方法

indexOf和lastIndexOf.这两个方法都接收两个参数。其中index从头开始查找,lastIndexOf从尾开始查找

var numbers = [1,2,3,4,5,4,3,2,1];
alert(numbers.indexOf(4)); //3
alert(numbers.lastIndexOf(4)); //5
alert(numbers.indexOf(4,4)); //5
alert(numbers.lastIndexOf(4,4)); //3

6.迭代方法

一共有5个迭代方法,每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象(影响this值)

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

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

filter(): 对数组中的每一项运行给定的函数,返回该函数会返回true的项组成的数组

forEach(): 对数组中的每一项运行给定函数,这个方法没有返回值

map(): 对数组中的每一项运行给定的函数,返回每次函数调用结果组成的数组

some(): 对数组中的每一项运行给定的函数,如果该函数对任意一项返回true,则返回true

使用forEach()方法实现简单的加法

var sum = 0;
[1, 2, 3, 4].forEach(function (item, index, array) {
    sum += item;
});
console.log(sum);//10

  forEach()方法除了接受一个必须的回调函数参数,第二个参数还可以接受一个可选的上下文参数(改变回调函数里面的this指向)

var out = [];
[1, 2, 3].forEach(function(elem){
  this.push(elem * elem);
}, out);
console.log(out);// [1, 4, 9]

  第二个参数对于多层this非常有用,因为多层this通常指向是不一致的,可以使用forEach()方法的第二个参数固定this

复制代码

var obj = {
  name: '张三',
  times: [1, 2, 3],
  print: function () {
  //该this指向obj
      console.log(this);
    this.times.forEach(function (n) {
    //该this指向window
      console.log(this);
    });
  }
};
obj.print();

复制代码

复制代码

var obj = {
  name: '张三',
  times: [1, 2, 3],
  print: function () {
  //该this指向obj
      console.log(this);
    this.times.forEach(function (n) {
    //该this同样指向obj
      console.log(this);
    },this);
  }
};
obj.print();

http://www.cnblogs.com/xiaohuochai/p/5682621.html

7. 归并方法

 reduce()和reduceRight().这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。reduce从数组第一项开始,逐个遍历到最后。而reduceRight()则从数组的最后一项开始,向前遍历到第一项。

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

alert(sum); //15

reduceRight作用类似,只是方向相反而已

 

后面的就不写博客了,因为写博客进度太慢,而且发现并没有那么适合我现在的学习情况。。

 

    

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值