javascript高级程序设计 读书笔记2

时间:2024-08-15 22:35:20

第五章 引用类型

  对象是引用类型的实例,引用类型是一种数据结构,将数据和功能组织在一起。描述的是一类对象所具有的属性和方法。对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数俩创建的,构造函数本身就是一个函数,只不过该函数试处于创建新对象的目的而定义的。  eg:  

 var person = new Object();

  1.创建Object实例的方式有两种   一:new+Object                二:对象字面量

                 var person = new Object();            var person = {

                 person.name = "Andy";               name:"Andy",  //这里是逗号    属性可以用引号括                                                    起来 表示为字符串

                 person.age = 29;                    age:29};   //29后面不要+,因为是最后一个属性

 对象字面量语法推荐只在考虑对象属性名的可读性时使用。,在用此方法定义对象时,不会调用Object构造函数。一般的开发人员更青睐字面量语法,因为代码少,有封装的感觉。字面量也是向函数传递大量可选参数的首选方式。eg:

        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:"Andy", 

          age:29

          }); //Name:Andy

           //age:29

          

        displayInfo({

          name:"zhou",

          });//Name:zhou

  2.一般来说,访问对象属性时使用点表示法,但是如果属性名中包含会导致语法错误的字符,或者属性名使用的时关键字或者保留字,就要使用【】方括号表示法

      eg:person[" first name"],通常,除非必须要使用变量来访问属性,否则建议使用点表示法。

  3.Array类型  数组是一组数据的有序列表,但是ES中的数组可以保存任意类型的数据,并且数组打大小时可以动态调整的。

  4.创建数组的基本方式:一 使用Array构造函数      var colors =new Array( x );参数可以为数值表示数组的初始长度  

                                           也可以为字符,表示初始数组的内容

             二  数组字面量表示法           var color = [args]             参数可以为空,或者时实际数组值,用逗号隔开,但是最后一个字符不可以是逗号

            与创建对象一样,字面表示法不会调用Array构造函数.

  5.在读取和设置数组的值时,要使用方括号 并提供相应值的基于0的数字索引。eg:colors[2]//读取第三项   设置:colors[2] = "red";  如果超出数组长度则自动增加到该索引值+1的长度。

      eg: var num = [0,1,2,3,4]   num[0] = 15//设置   num.length= 5;//增加5在末尾   num[99] =99;  //第100项为99    6-98为undefined  

  6.可以用instanceof 来检测某个对象是不是数组  value instanceof Array;   但是这个是假设在只有一个全局变量的环境下,如果包含多个框架就要用Array.isArray( X ) 来检测。

  7.数组有 toLocaleString(),toString()和valueOf()转换方法。调用数组的toString()方法会返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。valueOf()返回的还是数组。

  join()使用不同的分隔符来构建这个字符串,只接受一个参数,即用作作为分隔符的字符串,然后返回包含所有数组项的字符串

    eg:num= [1,2,3,4,5];  num.join("!");//1!2!3!4!5   如果不传参数或者参数为undefined   则使用逗号作为分隔符  

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

  pop() 从数组未移除最后一项,减少length的值-1,返回                   移除的项

  shift()从数组未移除第一项,减少length的值-1,返回                   移除的项           

  unshift()接受任意数量的参数,把他们逐个添加到数组头部,返回修改后的                                 数组长度  

增加的返回数组长度,减少的返回删除项

  reverse()反转数组项的顺序

  sort()调用toString()转型方法,对数组进行排序,unicode编码小的排在前面。 由于是toString()所以[0,1,5,10,15].sort()//0,1,10,15,5

  sort()方法可以接受一个比较函数作为参数。比较函数接受两个参数,如果第一个参数应该位于第二个之前返回一个负数

                                  如果第一个参数应该位于第二个之后返回一个整数

                                  相等则返回0;   

              函数如下:  function compare(value1,value2){      或者   function compare(value1,value2){

                      if(value1<value2)               return value1-value2

                      {return -1;}                   } 

                      else  if(value1>value2)            var values = [0,1,5,10,15];

                      {return 1;}                   values.sort(compare);

                      else{return 0;}

                      }                          alert(values);//0,1,5,10,15

                    var values = [0,1,5,10,15];

                    values.sort(compare);

                    alert(values);//0,1,5,10,15

  8.concat(),基于当前数组创建一个数组副本,并将接收的参数(任意类型)添加到副本的末尾,最后构建一个新的数组。

   slice(),基于当前数组创建一个新数组,接受1-2个参数,即要返回的起始项和结束位置(不包括结束位置)没如果只有一个参数,则为起始项到一直到数组末尾,不影响原始数组。

   splice()   删除:接受2个参数   要删除的第一项的位置和要删除的项数 splice(1,2)删除第二 第三项

           插入:接受3个参数    起始位置,0,要插入的项    splice(2,0,"red","green") 从第三项开始插入red green

        替换:  接受三个参数   起始位置,要删除的项数,要插入的项    splice(2,1,"red","green")删除第三项,插入red green

  9.查找位置  indexOf( x ,【Y】)X为要查找的值,从前开始,返回值为X索引位置,Y为可选参数表示起始位置

        lastindex  从后开始

        charAt(num) 查找索引位置为num的值

  10.迭代方法

    以下五个方法接受两个参数:要在每一项上运行的函数和[运行该函数的作用域对象]

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

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

    filter()对数组中的每一项运行给定函数,挑选出返回true的项成立一个新的数组

    map()在原数组的上对每一项运行指定函数,返回每次函数调用的结果组成的数组

    forEach(),对数组的每一项运行指定函数,没有返回值

      var numbers = [1,2,3,4,5,6,7]

      var everyResult = numbers.every(function(item,index,array){

              return (item>2);

              });//false

      

      var everyResult = numbers.some(function(item,index,array){

              return (item>2);

              });//true

    

      var everyResult = numbers.filter(function(item,index,array){

              return (item>2);

              });//[3,4,5,6,7]

      

      var everyResult = numbers.map(function(item,index,array){

              return (item*2);

              });// [2,4,6,8,10,12,14]

  11.reduce() //从第一项开始,逐个遍历到最后

    reduceRight()//最后一项开始

    接受两个参数:在每一项上的函数和[作为归并基础的初始值]

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

        var sum = sum.reduce(function(pre,cyr,index,array){

            return prev+cur;

        });//15