ECMAScript读javascript高级程序设计07-引用类型、Object、Array

一、引用类型

ECMAScript是支持面向对象的,可以通过引用类型描述一类对象所享有的属性和形式。

创制对象实例的艺术时是用new 操作符加构造函数:var p=new Person()。

二、Object类型

1.创建Object实例两种形式:

使用new操作符跟Object构造函数。

var o = new Object();
o.name = 'dami';
o.age = 25;

选用对象字面量表示法,推荐这种艺术,代码量小而且看上去有包装的感觉到。

var o = {
  name: 'dami',
  age: 25
}

一旦目的字面量声明对象时,大括号中为空,那对象只包括默许的性能和措施。

var o={};等同于var o=new Object();

目的字面量还适用于向函数传递大批量可选参数。

function showResult(args){
  var result='the result:';
  if(typeof args.name=="string"){
  result+=" my name is "+args.name;
  }
  if(typeof args.age=="number"){
  result+=" my age is "+args.age;
  }
  console.log(result);
}
showResult({});//the result:
showResult({name:"Peter"});//the result: my name is Peter
showResult({name:"Kate",age:28});//the result: my name is Kate my age is 28

目的字面量的性质名可以加引号,也得以不加引号。可是假使属性名是主要字仍然隐含特殊符号,则必须加引号。

var o = {
  name: 'dami',
  age: 25,
  "data-id":35
}

2.读取属性

  • 点表示法:o.name;
  • 方括号表示法:o[“age”];

唯独只要属性名是生死攸关字如故隐含特殊符号,则必须利用方括号表示法:o[“data-id”];

二、Array类型

ECMAScript中的数组元素得以是多种数据类型,而且长度是可以动态调整的。

1.创办数组对象

①使用结构函数Array().

var array=new Array('a','b','c');//["a", "b", "c"];

留神当参数是一个值时,倘诺参数是数值类型,则开创相应长度的数组;如若参数是任何品种,则创立的数总裁度是1。

var array=new Array(5);//[undefined, undefined, undefined, undefined, undefined]
var array=new Array('5');//["5"]

2.检测数组对象–Array.isArray()

var array=[1,3,5];
Array.isArray(array);//true

3.转换方法

  • toString():再次回到由数组中的每个元素用逗号分隔而成的字符串;
  • valueOf():再次回到的照样是数组;
  • join():方法有一个参数,将该参数作为分隔符,重返包罗所有数组元素的字符串。如若参数为空,则默许用逗号分隔。

    var array=[1,3,5];
    array.toString();//”1,3,5″
    array.valueOf();//[1, 3, 5]
    array.join();//”1,3,5″
    array.join(‘|’);//”1|3|5

4.栈和队列

栈是一种LIFO后进先出的数据结构,只在顶部做插入和删除操作。

  • push():将元素压入数组。可以接受多少个参数,将他们相继添加的数组末尾,并再次来到修改后的数总经理度;
  • pop():将元素弹出。弹出数组的末尾项,减弱数总裁度length,并且再次回到移除项的值。

    var array=[1,3,5];
    var count=array.push(8,9,10);
    console.log(count);//6
    var item=array.pop();
    console.log(item);//10
    console.log(array.length);//5

队列是一种FIFO先进先出的数据结构,在列表末尾添加项,在列表初阶移除项。

  • push():向末尾添加项,和栈相同;
  • shift():在列表开始移除项,收缩数组length值,并回到移除项的值。

    var array=[1,3,5];
    var count=array.push(8,9,10);
    console.log(count);//6
    var item=array.shift();
    console.log(item);//10
    console.log(array);// [3, 5, 8, 9, 10]

5. 重排序:

  • reverse():反转数组元素的逐条。
  • sort():对数组元素举办排序。sort方法排序方式要留心,是先对数组元素调用toString()方法得到字符串,然后根据字符串举行排序。

sort()方法还足以接受一个函数名作为参数,以便指定排序的平整。

var array=[1,5,9,3,10,7];
array.reverse();//[7, 10, 3, 9, 5, 1]
array.sort();//[1, 10, 3, 5, 7, 9]
function compare(a,b){
  if(a==b){
  return 0;
  }else if(a>b){
  return 1;
  }else{
  return -1;
  }
}
array.sort(compare);//[1, 3, 5, 7, 9, 10]

6.操作方法

concat():连天数组元素。先制造数组的副本,然后将元素追加到数组结尾,最后回来新数组。

  • 要是参数为空,则一向复制数组;
  • 即使参数是一个元素,则直接将其扩充到数组末尾;
  • 倘诺参数也是数组,则将该数组元素追加到副本末尾。

    var array=[1,3,5];
    array.concat();//[1, 3, 5]
    array.concat(88);//[1, 3, 5, 88]
    array.concat(‘a’,[[4,99],’b’]);//[1, 3, 5, “a”, [4, 99], “b”]

slice():收获数组分片。

  • 当传入八个参数时,分别表示数组的先导和最后地方的目录,但是回到的分组包括开端项但不包罗结尾项。
  • 当传入一个参数时,该参数标识起头地方索引,返回的分组是从该起来地点一向到数组结尾。
  • 当传入参数为负数时,从数组结尾开端计数,最终一个要素为-1.

    var array=[1,2,3,4,5,6,7,8,9,10];
    array.slice(2);//[3, 4, 5, 6, 7, 8, 9, 10]
    array.slice(5,8);//[6, 7, 8]
    array.slice();//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    array.slice(-3,-1);//[8, 9]

splice():向数组中插入项。通过传播分歧参数能够完毕八个操作:

  • 剔除:传入两个参数,第四个参数是要刨除的开场地方,第三个参数是要去除的尺寸。
  • 布署:首个参数是要插入的职位索引,第四个参数是0,从第几个参数起是要插入的要素项。
  • 轮换:第二个参数是要替换的前奏地点,第一个参数是要被替换的尺寸,第七个参数起是要替换的新的要素项。

    var array=[1,2,3,4,5,6,7,8,9,10];
    //删除
    var removed=array.splice(1,2);
    removed;//[2,3]
    array;//[1, 4, 5, 6, 7, 8, 9, 10]
    //插入
    array.splice(1,0,88,88,88);
    array;//[1, 88, 88, 88, 4, 5, 6, 7, 8, 9, 10]
    //替换
    array.splice(1,3,2,3);
    array;//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

7.迭代艺术

every(fn):对数组中的每个元素执行办法,即使每一项都回去true,则结果为true。

var array=[1,2,3,4,5,6,7,8,9,10];
var result=array.every(function(item,index,array){
return item>2;
});//false

some(fn):对数组中的每个元素执行措施,如若至少有一项重临true,则结果为true。

result=array.some(function(item,index,array){
return item>2;
});//true

filter(fn):对数组中的每个元素执行措施,再次回到该函数执行结果为true的元素构成的数组。

result=array.filter(function(item,index,array){
return item>2;
});//[3, 4, 5, 6, 7, 8, 9, 10]

map(fn):对数组中的每个元素执行格局,重返每一项的施行结果组成的数组。

result=array.map(function(item,index,array){
return item*2;
});//[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

表明:这一个迭代方法都不会改变原数组中的元素。