代码改变世界

JavaScript 高级程序设计 第5章引用类型 笔记

2015-05-07 18:01  danson  阅读(155)  评论(0编辑  收藏  举报

第五章 引用类型

.object类型

1.创建方法:

1.使用new 操作符创建

 var person=new object()

 Person.name=”Nicholasa”

 Porson.age=28

   2. 适用对象字面量创建(推荐使用)

      Var person={

 Name:”Nicholasa”,

 Age:28

 }

 

 2.访问对象属性

     1.使用person.Name

2.使用peerson[“name”](如果括号内是变量可以遍历数组的所有属性)

2.ARRAY类型

1.创建方法:

1. 使用new 操作符创建

 var person=new array()

2. 适用对象字面量创建(推荐使用)

      Var person=[]

3.使用数组属性length属性可以为数组添加或删除项

2.检测数组

1.使用的是Instanceof 对于网页或全局作用域

Ifvalue Instanceof  array{

//对数组执行某些操作

}

2.arrayisArray()方法  对于网页中使用了不同框架的检测,因为不同框架之间的构造函数不同

      Ifarray.insArray(value){

//对数组执行某些操作

}

3.转换的方法

所有对象都具有一下三种方法

    toLocaleString () 返回的经常是与一下方法相同的值,当调用此方法时,与其他两个方法不同之处在于他调用的是每一项的数组中 toLocaleString (),所以有时返回值也不会总是和其他两种相同

 

toString() 返回的是由数组中每个值的字符串形式拼接而成以一个逗号分开的字符串

valueOf() 此方法的会的还是一个数组

4.栈方法(先进后出)

Push()可以接受任意数量的参数,并把他们添加到数组末尾,返回修改后数组的长度

Pop() 可以移除数组的最后一项,返回移除的项,减少数组长度

以上两种方法模拟栈

5.队列方法(先进先出)

Shift() 移除数组中的第一项,返回移除得项,数组长度减少,

Push()可以接受任意数量的参数,并把他们添加到数组末尾,返回修改后数组的长度

以上两种方法模拟 队列

 

Unshitf() 从数组前添加任意项并返回新的长度,

Pop() 可以移除数组的最后一项,返回移除的项,减少数组长度

以上两种方法模拟反方向的队列

6.重排序方法

 1. Reverse()可以实行重新排序,但不灵活

 2. Sort() 此方法会调用tosting()方法 然后比较得到的字符串,因此可以给sort()方法传递一个函数作为参数,此函数有两个参数,value1 value2  如果value1应该在value2之前返回一个负数,如果两个参数相等返回0,如果value1应该在value2之后折则返回一个正值。

  Function compare(value1,value2){

  If(value1<value2){

Return -1}

Else if(value1>value2){

Return 1}

Else{return 0}

}

7.操作方法

1.Concat()  可以基于当前数组的所有项新建一个数组

     语法:Var  newarray=concat(“新建的项”,[oldarray])

2.slice()  基于当前数组的一项或多项新建数组(截取数组中的项)

接收两个参数:分别是截取的开始项和结束项,(当传入的参数是一个时表示截取的时从此项到最后一项)

3.Splice()

删除:接收两个参数时表示:要删除第一项的起始位置和删除的项数

插入:接收3个参数:起始位置 删除的项数(0) 要插入的项(可以是任意项),

替换:可以向指定位置插入任一项同时也可以删除任意数量的项,接收3个参数

       起始位置 删除的项数 插入的任意数量的项。

4.join() 接收一个参数(符号)把数组转化为字符串,以指定的符号分开,

8.位置方法

IndexOf() 表示从前往后查

lastIndexOf() 表示从后往前查

都接受两个参数:要查找项和查找起点的索引

此两种方法返回的是要查找的项在数组中的位置,如果没有查到则返回的是-1

9.迭代方法

Every()对数组的每一项运行给定函数,如果还函数对每一项都返会ture,则返回Ture

Filter()对数组的每一项运行给定函数,返回该函数会返回ture的项组成的新数组

foEach()对数组的每一项运行给定函数,该方法没有返回值

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

Some()对数组的每一项运行给定函数 如果该函数对任意一项返回ture,则返回ture

如:

 

 

   

Var numebers=[1,2,3,4,5,4,3,2,1]

Var everyResult=numebers.every(function( item,index,array){

Returnitem>2

})

Alert(everyResult)  //false

 

 

Var everyResult=numebers.some(function( item,index,array){

Returnitem>2

})

Alert(everyResult)  //ture

 

 

 

Var filterResult=numebers.filter(function( item,index,array){

Returnitem>2

})

Alert(filterResult)  //[3,4,5,4,3]

 

 

 

Var filterResult=numebers.map(function( item,index,array){

Returnitem*2

})

Alert(filterResult)  //[2,4,6,8,10,8,6,4,2]

 

10. 归并的方法

Reduce() 从左到右迭代数组所有项,然后构建一个最终返回值

reduceRight()从右到左迭代数组所有项,然后构建一个最终返回值

以上方法接收两个参数:一个在每一项上调用的函数和(可选)作为归并基础的初始值。调用的函数可接受四个参数:前一个值 当前值 项的索引 数组对象。

用此方法可以求数组中所欲项之和:

   

Var values=[1,2,3,4,5]

Var sun=values.reduce(function()prev,cur,index,array){

 Return prev+cur;})

Slert(sun)  //15

3.Date类型

4.RegExp类型

语法:var expression=/pattern/flags;

Pattern:是任何简单或复杂的正则表达式

Flags:表示表正则达式的行为取值有三个:g, i m.

g:全局模式,即模式将被用于所有字符串,而非在发现第一个匹配项时停止

i:表示不区分大小写

m:表示多行模式。即达到一行末尾时还会继续查找下一行是否存在。

注意:模式中使用所有的元字符都必须转义

 

RegExp 属性

Global:布尔值,表示是否设置了 g标志

ignoreCase: 布尔值,表示是否设置了 i

lastIndex:整数,表示开始搜索下一个匹配项的起始位置,从0开始;

Multiline:布尔值,表示是否设置了m标志

Source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。

RegExp方法

1. Exec() 接收一个参数,即要应用模式的字符串,然后返回包含第一个匹配信息的数组,或则在没有匹配项的情况下返回null

    返回的数组包含两个额外的属性:index input

     Index:表示匹配项在字符串中的位置,

   Input:表示应用正则表达式的字符串。

  1. Test() 接收一个字符串参数,在模式与该参数匹配的情况下返回true,否则返回false.

5.Founction类型

 1.声明:函数声明 此方法不会因为声明和调用的 位置而受到影响

    Function sum(num1,num2){

Retuen num1+num2

}

       函数表达式:声明必须在调用的前面

Var sum=function(num1,num2){

Return num1+num2

}

2.javascript函数没有重载

重载:由于函数参数传递的是数组形式(后面有介绍),所以在JavaScript中函数没有重载(同名函数只会覆盖)

3.函数名本身就是变量,所以函数可以作为值来使用,

 

 

4.函数内部的属性

a)  Arguments:他是一个类数组对象,包含着传入函数中的所有参数,它还有一个名为 callee的属性,该属性是一个指针,指向拥有Arguments对象的函数

 

类如计算阶乘:

  Function factorial(num){

 If(num<1){

Return 1

}else{

Return num*factorial.callee(num-1)

       }

  b)  this 引用的是函数据以执行的环境对象。

 

  c)  caller这个属性保存着调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,它的值为null.

 

 

5.函数属性和方法

 

1.属性:length:表示函数希望接收命名参数的个数

      Prototype(原型第六章介绍

2.方法:每个函数都有两个非继承而来的方法apply()  call()

      两个方法都是在特定的作用域中调用函数,实际上就等于设置this的值,

      Apply()方法都接受两个参数:一个是在其中运行函数的作用域,另一个是参数数组

   如:function sum(num1,num2){

   Return num1+num2

}

Function callSum(num1,num2){

    Return sun.apply(this,arguments)

}  出入的是argument  此处还可以传递数组

Call()方法与apply()相同,但在第二个参数传入的必须是逐个列举出来。

   使用call()方法时 arguments 换成列举的每个参数。

 

 

  1. Call()方法与apply()可以扩充函数的作用域。

   如:window.color=”red”

      Var o={color:blue}

   Function saycolor(){

  Alert(this.color)

}

Saycolor();  //red

Saycolor.call(this)   //red

Saycolor.call(window)    //red

Saycolor.call(o)     //blue

  以上代码运行的结果,因为saycolor()也是全局函数定义,在全局作用域中调用时显示的是“red.当运行到Saycolor.call(o)  函数的执行环境就不一样了,this 对象指向了o,  所以显示“blue

 

  1. ECMAscript5还定义了一个方法,bind()这个方法创建一个实例,其this值会被绑定到传给bind()函数的值

       以上代码:var objectsaycolor=saycolor.bind(o)

   Objectsaycolor() ;   //  blue

 

 

6.基本包装类型

1.Boolean类型

2.Number 类型

 方法:

 toFixed()会按照指定的小数位返回数值的字符串表示

 

3.string类型

属性:length

方法:

 1.字符方法:

 charAt()charCodeAt():都接受一个参数,即基于0的字符位置。

     charAt()返回的是单字符字符串的形式返回指定位置的那个字符

     charCodeAt()返回的是指定位置的那个字符的字符编码

 2.字符串操作的方法 

     Concat() 用于将一个或多个字符串拼接起来成为新的字符串

     Slice()   substr()   substring() 返回被操作字符串的一个子串,他们都接受一个或两个参数。Slice()  substring() 第一个参数时开始位置  第二个参数是子字符串最后一个字符后面的位置。substr() 第二个参数表示返回字符串的个数。

       注意:当传入的参数时负值时他们的行为都不相同

3.字符串位置方法 

 indexOf() 从开始到末尾查询

 lastindexOf() 从末尾到开始查询

 

都接收两个参数:要查询的字符串 和 查询的开始位置 如果没有找到子字符串则返回-1

4.ECMAscript5 定义了 trim()方法 这个方法创建一个子字符串的副本,删除前置和后缀的所有空格

5.字符串的大小写转换

toLowerCase()

toUpperCase()

6.字符串的模式匹配

1.Match() 在字符串上调用此方法(与exec())相同

此方法只接受一个参数,要么是正则表达式或REgExp对象

2.Search() 与Match()的参数相同,返回的是字符串第一个匹配的索引,如果没有找到返回的是-1.

3. Replace() 方法,接收两个参数,第一个可以是RegExp对象或一个字符串,第二个参数可以是一个字符串或一个函数。如果第一个参数是字符串,那么只会替换第一个字符串。想要替换所有字符串,唯一办法就是提供一个正则表达式,指定(g)标志。

4. Split() 基于指定的分隔符将一个字符串分割成多个子字符串,并将结果放到一个数组中。这个分隔符可以是字符串也可以是RegExp对象。Split() 可以接受第二个参数 用于指定返回的数组指定大小(length

5.localeCompare()  

    比较两个字符串并返回下列值中的一个

      a)如果字符串在字母表中应该排在字符串参数之前,则返回一个负数

      b) 如果字符串等于字符串参数 则返回0

      c)如果字符串在字母表中应该排在字符串参数之后 则返回一个正数

6.formCharCode()静态方法 接收一个或过个字符编码,然后把它们转换为字符串

 

7.单体内置对象

 1. Global 对象

 2.evel() 方法  接收一个参数:即是要执行 JavaScript的字符串 此方法就像一个完整的ECMAscript 解析器

   如: evel(“ alert(“hi”)”)=alert(“hi”)

 3. Global 对象的属性

      Undefined

    NaN

  Infinity

  Array

 ............

  1. Window 对象

8.Math 对象

  1. Min()和 max()方法

  2.舍入

Ceil() 向上取整

Floor() 向下去整

Round() 四舍五入

 3.Random()返回大于等于0小于1的随机数

 4.其他方法:

absnum) 求绝对值

...........