JavaScript.之引用类型

object类型

object类型是JavaScript中最常见的一种类型,虽然object类型不具备多少功能,但对于在应用程序中存储和传输数据而言,object是比较理想的选择。

创建object实例的方式有两种。第一种是使用new操作符号跟object函数。

                var person=new object();

                person.name=“李”;

                person.age=“12”;

                另一种方式是使用对象字面量表示法:

                var person={

                   name:‘李’

                   age:‘12’

                     }

              另外使用对象量语法时,如果留空其花括号,则可以定义值包含默认属性和方法的对象

    一般来说,访问对象属性时使用的都是点表示法,这也是很多面向对象语言中通用的语法。不过在JavaScript中也可以使用方括号表示法来访问对象的属性。

      alert(person.name);

      alert(person['name']);

    从功能上,这两种访问对象属性的方法没有任何区别。但方括号的语法的主要优点是可以通过变量来访问属性。

      var propertyname=“name”;

      alert(person[propertyname]);

    通常,除非必须使用变量来访问属性,否则建议使用点表示方法。

Array类型

  JavaScript中的数组与其他语言中的数组有很大的差别。虽然JavaScript数组与其他语言中的数组都是数据的有序列表,但与其他语言不同的是,JavaScript数组的每一项都可以保持任何

  类型的数据。也就是说,可以用数组的第一个位置来保存字符串,用第二个位置来保存数值,用第三个位置来保存对象。而且JavaScript中的数组大小可以动态的调整的,即可以随着数据

  的添加自动增长以容纳新增数据。

    创建数组的基本方式有两种:1.使用Array的构造函数

                  var colors1=new Array();

                  var colors2=new Array(20);

                  var colors3=new Array(‘red’,‘bule’,‘yellow’);

                  2.创建数组的第二种方式是使用数组字面量表示法。

                  var colors=[ ];

                  var colors=[‘red’,‘bule’,‘yellow’]

                   在读取和设置数组的值时,要使用方括号并提供相应值的基于0 的数值索引

                    var colors[ ‘red’,‘bule’,‘yellow’];  #定义一个字符串数组

                    alert(colors[0]);         #显示第一项

                    colors[2]='green';          #修改第三项

                    colors[3]='black';          #新增第四项

  数组的长度保存在length属性中,这个属性始终会返回0或者更大的值

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

  利用length属性也可以方便的在数组末尾添加新项。

转换方法

  所有对象都具有,tolocalestring()、tostring()、value()、f()方法。其中调用tostring()和value()的方法会返回相同的值,即有数组中的每个值的字符串形成拼接而成的一个逗号

  分隔的字符串。实际上,为了创建这个字符串会调用数组每一项的tostring()方法。

    var colors=[‘red’,‘yellow’,‘bule’];

    alert (colors.tostring());

    alert (colors.valueof());

    alert(colors);

  我们首先显示的调用了tostring()或value()f()的方法,以便返回数组的字符串表示。每个值的字符串表示拼接成了一个字符串,中间以逗号分隔。最后一行代码直接将数组传递给了alert()。

  由于alter要接受字符串参数,所以他会在后台调用tostring()方法,由此会得到与直接调用tostring()方法相同的结果。

  tolocalestring()方法经常也会返回与tostring()和value()方法相同的值,但也不总是如此。当调用数组的tolocalestring()方法时,它也会创建一个数组值的以逗号分隔的字符串。而与两个方法

  唯一不同之处在于,这一次为了取得每一项的值,调用的是每一项的tolocalestring( )方法,而不是tostring()方法。

  数组继承的tolocalestring()、tostring()、value()方法,在默认情况下都会以逗号分隔的字符串的形式返回数组项。而如果使用join方法,则可以使用不同的分隔符来构建这个字符串。

    注意:如果数组中的每一项的值是null或者underfined,那么该值在tostring()、join()、tolocalestring()、value()方法返回的结果中以空字符表示。

栈方法

  JavaScript数组也提供了一种让数组的行为类似于其他数据结构的方法,具体来说,数组可以表现的像栈一样,后者是一种可以限制插入和删除项的数据结构,栈是一种后进先出的数据结构。而栈中项

  的插入(叫做推入)和移除(叫做弹出),只发生在一个位置——栈的顶部。JavaScript提供了push()和pop()方法,以便实现类似栈的行为。

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

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

队列方法

  队列数据结构的访问方法是先进先出。队列在列表末端添加项,从列表的前端移除项。

  由于push()是向数组末端添加的方法,因此要模拟队列只需一个从数组前端取得项的方法。实现这一数组操作的方法是shift(),它能够移除数组中的第一个项并返回该项,同时将数组长度减1.

  结合shift()和push()方法,可以像使用队列一样使用数组。

    var colors=new Array();        //创建一个数组

    var count=colors.push(‘red’,‘bule’);  //推入两项

    alert(count);             //2

    count=colors.push(‘yellow’);      //推入一项

    alert(count);             //3

    var item=colors.shift();        //取得第一项

    alert(item);             //red

    alert(colors.length);         //2

  JavaScript还为数组提供了一个unshift()方法,unshift()与shift()用图相反:它能在数组前端添加任意个项并返回新数组的长度。因此,同时使用push()和pop()方法,可以从反方向来模拟队列,

  即在数组的前端添加项,从数组的末端移除。

    注意:IE对Java中实现中存在一个偏差,其中unshift()方法总是返回underfined而不是数组的新长度。

重排序方法

  数组中已经存在两个可以直接用来重新排序的方法:reverse()和sort(),reverse()方法会反转数组的项的顺序。

  var values=[1,2,3,4,5];

  values.reverse();

  alert(values);    //  5,4,3,2,1,

  在默认情况下,sort()按升序排列数组项——即最小的值位于最前面,最大的值位于最后面。为了实现排序,sort()方法会调用每一个数组项的tostring()转型方法,然后比较得到的字符串,已确定

  如何排序,即使数组中的每一项都是数值,sort()方法比较的也是字符串。

操作方法

  JavaScript中对于操作数组提供了很多方法,其中

     concat()方法可以基于当前数组中的所有项创建一个新数组,如果传递给concat()方法的是一个或多个数组,则该方法会将这些数组中的每一项都添加到

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

 重点: slice()方法能够基于当前数组中的一个或多个项创建的一个新数组。slice()方法可以接受一个或两个参数,即要返回项的起始和结束位置,在只有一个参数的情况下,slice()方法返回从该参数指定位置开始

     到当前数组末尾的所有项。如果有两个参数,该方法返回起始和结束位置之前的项——但不包括结束位置的项。

     splice()方法,主要用途是向数组中部插入项,使用这种方法的方式有三种:

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

      2.插入——可以向指定位置插入任意数量的项,三个参数:起始位置、0(要删除的项数)、要插入的项。如果要插入多个参数,则可以传入多个参数。

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

date类型

  要创建一个日期对象,使用new操作符和date构造函数即可

  在调用date构造函数而不传参的情况下,新创建的对象自动获取当前日期和时间。如果想根据特定的日期和时间创建日期对象,必须传入表示该日期的毫秒数。为了简化这一计算过程JavaScript提供了两个方法:

    Date.parse()和Date.UTC(),其中Date方法接受一个表示日期字符串的参数,然后尝试根据这个字符串返回相应日期的毫秒数。如果传入date.parse()方法的字符串不能表示日期,则返回NaN

  date类型还有一些专门用于将日期格式化为字符串的方法,方法如下:

  todatestring()——以特定于实现的格式显示星期几、月、日和年

  totimestring()——以特定于实现的格式显示时、分、妙和时区

  tolocaldatestring()——以特定于地区的格式显示星期几、月、日、年

  tolocaleTimestring()——以特定于实现的格式显示时、分、妙

  toUTCstring( )——以特定于实现的格式完整的UTC日期

    date类型的所有方法:

             

function类型

    函数通常是使用函数声明语法定义的

    function sum(num1,num2)

    {

      return num1 + num2

    }

    另一种定义函数的方式是使用function构造函数,可以接受任意数量的参数,但最后一个函数始终被看成是函数体,而前面的参数则枚举出了新函数的参数。

    由于函数名仅仅是指向函数的指针,因此函数名与包含对象指针的其它变量没有什么不同,也就是,一个函数会出现多个名,

      注意:使用不带括号的函数名是访问函数指针,而非调用函数。

函数声明与函数表达式

    函数声明与函数表达式的区别;解析器在向执行环境加载数据时,对函数声明和函数表达式并非一视同仁。解析器会率先读到函数声明,并使其在执行任何代码之前可用(可以访问);

                  至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解析执行。

作为值的函数

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

函数内部属性

    在函数内部有两个特殊的对象:arguments和this。其中srguments是一个类数组对象,包含着传入函数中的所有参数,而且可以使用length属性来确定传递进来多少个参数。

                  arguments的主要用途是保存函数参数,但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数

                  this引用的是函数据以执行操作的对象——this函数在执行时所处的作用域(当前网页的全局作用域中调用函数时,this对象引用的就是window)

函数属性和方法

    在JavaScript中,函数是对象,因此函数也有属性和方法。每个函数都有两个属性:length和propotype,其中length属性表示函数希望接受的命名参数的个数。

            Propotype属性保存了他们所有实例方法的真正存在,

    每个函数都包含两个非继承类的方法,apply()和call()。这两个方法的用图是在特定的作用域中调用函数,实际上等于设置函数体内的this对象的值。

      apply()方法接受两个参数,一个是在其中运行的作用域,另一个是参数数组。其中第二个参数可以使Array实例,也可以是arguments对象。(apply、和call 可以扩充函数赖以运行的作用域)

        注意:每个函数都有一个非标准的caller值,该属性指向调用当前函数的函数。一般在一个函数的内部,通过arguments、callee、caller 来实现对调用栈的追溯。目前IE、Firefox、Chrome都

           支持该属性,但建议将该属性用于调试目的。

 

posted @ 2019-01-29 16:58  jacky912  阅读(1122)  评论(0编辑  收藏  举报