<Javascript篇> 引用类型(一)

  窥探于《JavaScript高级程序设计.第3版》第5章“引用类型”。

  夹杂了自我的愚解,然后经过自我的蹂躏,就成了如下的读后感了。

 站在巨人的肩膀,看得更远。希望有人也能踩着我的肩膀前进哈。


                                                     一. Obejct类型    

好处:在应用程序中存储和传输数据,是非常理想的选择。

创建方式:

            1,new+Object构造函数

                var person=new Object();

                  person.name="Nicholas";

                 person.age=29;

           2,对象字面量

                var  person={

                   name:"Nicholos",

                    age:"29"

                }

引用Object的属性: 

           1,点表示法

             person.name;

           2,方括号表示法来访问对象的属性

           person["name"]

 

                                  二.Array类型

         注:Array简称数组,与java语言相比,它更加自由,它的每一项可以保存任何类型的数据。

          1.创建方式

                   (1),var colors = new Array();   //new 加Array构造函数声明方式创建 

                   (2),var  colors=["red","blue","green"] ;   //数组字面量表示法

                    注:有些特殊的细节得注意:

                            首先对于构造函数方式创建数组如下几种形式都是对的。

                            var colors= new Array(20);   //创建length为20的数组

                            var colors = new Array("red","blue","green");  //创建3个字符串值的数组

                            var colors= Array(3);  //省略new,创建length为3的数组

                            var names =Array("Greg");  //省略new,创建1个字符串值的数组

                            对于数组字面量表示法,如下特殊的形式也是正确的:

                            var names=[];   //创建一个空数组

                             var values=[1,2,];  //这样也对,但是不同的浏览器对其的认知可能有所偏差,例如在IE8及之前版本中,values会成为一个包含3个项且每项的值分别为1、2和undefined的数组;在其他浏览器中,values会成为一个包含2项且分别为1和2的数组。所以建议别这么用。

          2.Array用法

               var colors=new Array("lv","zhang","guo");

               (1),Array数组长度的获取

                 alert(colors.length); //3

                 (2),取值

                   alert(colors[0]);  //lv

                    alert(colors[100]);  //取值超过数组的length,返回undefined

                 (3).赋值

                   colors[0]="jin";

                   alert(colors[0]);  //jin

                   注:如果某个值得索引超过了 数组现有项数,数组的length会自动增加该索引值

                 colors[99] = "black";

                 alert(colors.length);  //100

                  (4),检测数组

                      Array.isArray(value);  //检测value是否为数组  true是 flase否

                (5),转化方法

                        alert(colors.toString())  ;   //lv,zhang,guo

                        alert(colors.valueOf());    //lv,zhang,guo

                         alert(colors);                   //red,zhang,guo

                        join()方法只接受一个参数,即用作分隔符的字符串,然后返回包含所有数组的字符串。

                         alert(colors.join("||"));   //red||green||red

               (6).栈方法

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

                          var count=colors.push("lv","zhang");            //推入两项

                          alert(count);  //2

                         count = colors.push("guo");                            //推入另一项

                          alert(count);                                                      //3

                         var item =colors.pop();                                      //取得最后一项

                         alert(item);

                          alert(colors.length);

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

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

              (7).队列方法

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

                           var count= colors.push("lv","zhang"); //推入两项

                           alert(count);   //2

                             count = colors.push("guo");

                             alert(count);  //3

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

                              alert(item); //lv

                              alert(colors.length);  //2 

                              注:shift()方法能够移除数组中的第一项并返回该项,同时将数组长度减1.

                                     unshift()方法能在数组前端添加任意个项并返回新数组的长度。

             (8)重排序方法

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

                     values.reverse();

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

                    注:reverse()方法会反转数组项的顺序。

                     fuction 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

                    注:sort()方法按升序排列数组项-----即最小的值位于最前面,最大的值排在最后面。

                          但是sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序。但是这种排序方式在很多情况下都不是最佳方案,因此sort()方法可以接收一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。

         (9)操作方法

                   var  colors = ["lv","zhang","guo"];

                    var colors2=colors.concat("love",["lu","yan"]); 

                    alert(colors);  //lv,zhang,guo

                     alert(colors2); //lv,zhang,guo,love,lu,yan

                   注:concat()方法可以基于当前数组中的所有项创建一个新数组。

                   var colors = ["lv","zhang","guo"];

                    var colors2=colors.slice(1);

                    var colors3 =colors.slice(1,2);

                     alert(colors2);  //zhang,guo

                      alert(colors3);  //zhang,guo

                   注:删除 :可以删除任意数量的项,只需指定2个参数:要删除的第一项的位置和要删除的项数,例如splice(0,2)会删除数组中的前两项。

                          插入:可以向指定位置插入任意数量的项,只需提供3个参数:起始位置、0(要删除的项数)和插入的项。如果要插入多项,可以再传入第四、第五,以至任意多个项。

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

             (10)位置方法

                    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

        (11)迭代方法

            every()、filter()、forEach()、map()、some()为数组的5个迭代方法。

            every()用法: 

                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

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

             some()用法:

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

                      return (item>2);

                  });

                   alert(someResult);  //true

                    注:对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true;

                 filter()用法:

                          var filterResult = numbers.filter(fuction(item,index,array){

                                   return (item>2)

                            });

                           alert(filterResult);  //[3,4,5,4,3]

                   注:filter()对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。

                  map()方法用法:

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

                               return item*2;

                       });

                      alert(mapResult);  //[2,4,6,8,10,8,6,4,2]

                      注:map()对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。

                      forEach()方法用法:

                      numbers.forEach(fuction(item,index,array){

                           //执行某些操作

                       });

                       注:对数组中的每一项运行给定的函数。这个方法没有返回值。

          (11)归并方法

                 reduce()方法:(一).从数组的第一项开始,琢个遍历到最后。 (二)接受两个参数:一个在每一项上调用的函数和(可选)作为归并基础的初始值。(三),传给reduce()的函数接收4个参数:前一个值、当前值、项的索引和数组对象。

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

                               var sum = values.reduce(function(prev,cur,index,array){

                                   return prev+cur;

                               }); 

                               alert(sum);  //15

                    reduceRight()方法:(一).从数组的最后一项开始,琢个遍历到第一项。 (二)接受两个参数:一个在每一项上调用的函数和(可选)作为归并基础的初始值。(三),传给reduce()的函数接收4个参数:前一个值、当前值、项的索引和数组对象。

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

                                    var sum = values.reduceRight(function(prev,cur,index,array){

                                           return prev+cur;

                                     });

                                    alert(sum);  //15                                    

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容