JavaSript高级程序设计-第五章学习笔记

2018-01-22  本文已影响0人  一包

Object类型

创建Object实例的方式有两种:

var person=new Object();
person.name="JJ";
person.age=29;
  1. 对象字面量表示法;
var person={
    name:"JJ";
    age:29;
}

使用对象字面量法时,属性名也可以使用字符串;

也可以这样:

var person={};//与new Object()相同
person.name="JJ";
person.age=29;

我们更多使用对象字面量语法,实际上,对象字面量也是向函数传递大量可选参数的首选方式;

function displayInfo(args){
    var output="";
    if(typeof args.name=="string"){
        output+="Name:"+args.name+"\n";
    }
    if(typeof args.age=="number"){
        output+="Age:"+args.age+"\n";
    }
    alert(output);
}
displayInfo({
    name:"JJ";
    age:"29"
});
displayInfo({
    name:"YY";
});

这种传递参数的模式最适合需要向函数传入大量可选参数的情况;

访问对象属性的方法:

alert(person["name"]); //"JJ" 要以字符串的形式
alert(person.name); //"JJ"

功能上看,这两种方法没有任何区别;

方括号语法的优点:

  1. 可以通过变量来访问属性
var propertyName="name";
alert(person[propertyName]); //"JJ"
  1. 如果属性名中包含会导致语法错误的字符,或属性名使用的是关键字或保留字,也可以使用方括号表示法;
person["first name"]="JJ";

由于"first name"包含空格,不能使用点表示法来访问它;

一般除非必须使用变量来访问属性,否则建议使用点表示法;

Array类型

创建数组的基本方式:

var colors=new Array();
var colors=new Array(20);//创建length值为20的数组
var colors=new Array("red","green");

new操作符也可以省略;

  1. 数组字面量表示法
var colors=["red","green"];
var names=[];

数组的length属性不止是读的,可以通过设置这个属性从数组末尾移除项或向数组中添加新项;

var colors=["red","blue"];
colors.length=1;
alert(colors[1]);//undefined
var colors=["red","blue"];
colors.length=3;
alert(colors[2]);//undefined

利用length也可以方便在数组末尾添加新项;

var colors=["red","blue"];
colors[colors.length]="black";//在位置2添加颜色
colors[colors.length]="brown";//在位置3添加颜色

5.2.1检测数组

5.2.2转换方法

var colors=["red","green","blue"];
alert(colors.join(",")); //red,green,blue 重现了toString()方法的输出;
alert(colors.join("|}")); //red||green||blue

5.2.3栈方法(后进先出)

  1. push()方法:可以接受任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度
  2. pop()方法:从数组末尾移除最后一项,减少数组的length值,然后返回移除的项
var colors=new Array();
var count=colors.push("red","green");
alert(count); //2

count=colors.push("black");
alert(count);//3

var item=colors.pop();
alert(item); //"black"
alert(colors.length); //2

5.2.4队列方法(先进先出)

  1. shift()方法:移除数组中的第一个项返回该项
  2. unshift()方法:能在数组前端添加任意个项返回新数组的长度

5.2.5重排序方法

var values=[0,1,5,10,15];
values.reverse();
alert(values);//15,10,5,1,0
var values=[0,1,5,10,15];
values.sort();
alert(values);//0,1,10,15,5

这种排序方式不是最佳,因此sort()方法可以接收一个比较函数作为参数。

这个比较函数可以适用大多数数据类型

升序:

function compare(value1,value2){
    if(value1<value2){
        return -1;
    }
    else if(value1>value2){
     return 1;

    }
    else{
        return 0;
    }
}
var values=[0,1,5,10,15];
values.sort(compare);
alert(values);//0,1,5,10,15

降序:

function compare(value1,value2){
    if(value1<value2){
        return 1;
    }
    else if(value1>value2){
     return -1;

    }
    else{
        return 0;
    }
}
var values=[0,1,5,10,15];
values.sort(compare);
alert(values);//15,10,5,1,0

对于数值类型或者其valueOf()会返回数值类型的对象类型,可以使用一个更简单的比较函数。

function compare(value1,value2){
    return value2-value1;
}

5.2.6操作方法

var colors=["red","green"];
var colors2=colors.concat("yellow",["black","brown"]);

alert(colors); //red,green
alert(colors2); //red,green,yellow,black,brown
var colors=["red","green","blue","yellow","purple"];
var colors2=colors.slice(1);
var colors3=colors.slice(1,4);

alert(colors2); //green,blue,yellow,purple
alert(colors3); //green,blue,yellow

如果slice方法的参数中有一个负数,则用数组长度加上该数来确定相应位置

  1. 当有两个参数时:要删除第一项的位置,或删除的项数;
  2. 当有三个参数时:插入。三或以上参数:替换,插入的项不必与删除的项数相等;
var colors=["red","green","blue"];
var removed=colors.splice(0,1);//删除第一项
alert(colors);//green,blue
alert(removed);//red

removed=colors.splice(1,0,"yellow","orange");//从位置1开始插入两项
alert(colors);//green,yellow,orange,blue
alert(removed);//返回的是空数组

removed=colors.splice(1,1,"red","purple"); //插入两项,删除一项
alert(colors);//green,red,purple,orange,blue
alert(removed); //yellow

splice() 方法与 slice() 方法的作用是不同的,splice() 方法会直接对数组进行修改。

slice可用于字符串,splice则不可用于字符串

5.2.7位置方法

都有两个参数,第一个要查找的项,第二个表示要查找的起点位置(可选);

这两个方法都返回要查找的项在数组中的位置,如果没有找到则返回-1;

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

5.2.8迭代方法

ECMAScript5为数组定义了5个迭代方法。每个方法都接收两个参数:要在每一项上运行的函数和(可选)运行该函数的作用域对象--影响this的值;

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

  1. every(),传入函数必须对每一项都返回true,这个方法才返回true;
  2. some(),只要传入的函数对数组中某一项返回true,就会返回true;
var numbers=[1,2,3,4,5,4,3,2,1];
var everyResult=numbers.every(function(item,index,array){
    return(item>2);
});
alert(everyResult); //false

var someResult=numbers.some(function(item,index,array){
    return(item>2);
});
alert(someResult); //true
  1. filter(),它利用指定函数确定是否在返回的数组中包含某一项。
var numbers=[1,2,3,4,5,4,3,2,1];
var filterResult=numbers.filter(function(item,index,array){
    return(item>2);
});
alert(filterResult); //[3,4,5,4,3]

这个方法对查询符合某些条件的所有数组项非常有用;

  1. map(),也返回一个数组,这个数组每一项都是在原始数组中对应项上运行传入函数的结果;
var numbers=[1,2,3,4,5,4,3,2,1];
var mapResult=numbers.map(function(item,index,array){
    return  item*2;
});
alert(mapResult);//[2,4,,6,8,10,8,6,4,2]
  1. forEach(),没有返回值,本质上和使用for循环迭代数组一样;
var numbers=[1,2,3,4,5,4,3,2,1];
number.forEach(function(item,index,array){
  //执行某些操作
  };

5.2.9归并方法

  1. reduce(),从数组第一项开始
  2. reduceRight(),从数组的最后一项开始

这两个方法都会迭代1数组所有项,然后构建一个最终返回的值;

它们的函数接收四个值:前一个值,当前值,项的索引和数组对象;

这个函数返回的任何值都会作为第一个参数自动传给下一个项;

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

Date类型

year:四位年份,如果写成两位数,则加上1900

month:表示月份,0表示一月,11表示12月

date:表示日期,1到31

hour:表示小时,0到23

minute:表示分钟,0到59

second:表示秒钟,0到59

ms:表示毫秒,0到999

日期的运算

类型转换时,Date对象的实例如果转为数值,则等于对应的毫秒数;如果转为字符串,则等于对应的日期字符串。所以,两个日期对象进行减法运算,返回的就是它们间隔的毫秒数;进行加法运算,返回的就是连接后的两个字符串。

var d1 = new Date(2000, 2, 1);
var d2 = new Date(2000, 3, 1);

d2 - d1
// 2678400000

d2 + d1
// "Sat Apr 01 2000 00:00:00 GMT+0800 (CST)Wed Mar 01 2000 00:00:00 GMT+0800 (CST)"

Date.now()

返回表示调用这个方法时的日期和时间的毫秒数;

//取得开始时间
var start=Date.now();
doSomething();
//取得停止时间
var stop=Date.now();
result=stop-start;

上一篇下一篇

猜你喜欢

热点阅读