J2EE社區

          茍有恒,何必三更起五更眠;
          最無益,只怕一日曝十日寒.
          posts - 241, comments - 318, trackbacks - 0, articles - 16

          導航

          留言簿(30)

          隨筆分類(219)

          友情鏈接

          搜索

          •  

          積分與排名

          • 積分 - 1167024
          • 排名 - 25

          最新隨筆

          最新評論

          閱讀排行榜

          第5章 引用類型

          Posted on 2011-07-19 15:07 xcp 閱讀(334) 評論(0)  編輯  收藏 所屬分類: JavaScript高級程序設計(第2版)
          1.引用類型是一種數據結構,從技術上講是一門面向對象的語言,通常稱為類。從技術角度來說是一門面向對象的語言,但它不具備傳統面向對象語言所支持的類和接口等基本結構。
          2.創建Object實例的方式有兩種:
              a. 用new操作符后跟Object構造函數
                  var person = new Object();
                  person.name = "xcp";
                  person.age = 23;
              b. 另一種方式是使用對象字面量表示法
                  var person = {
                      name:'xcp';
                      age:23;
                  }
                  或者
                  var  person={}
                  person.namge="xcp";
                  person.age=23;
           3.創建Array數組有兩種方法:
              a.  使用Array的構造函數
                  var colors = new Array();
                  var colors = new Array(20);
                  var colors = {"red","blue","green"}
                  //每一個數組元素的初始值都是undefined;
              b. 使用數組字面量方法
                  var colors = Array(20);
                  var colors = ["red","blue","green"];
          4.使用Array的常用方法:
              a. 棧操作方法(后進先出):push 推入,pop 彈出 
                  var colors=["red","blue"];
                  colors.push("green"); //推入一項
                  colors[4]="block"; 
                  alert(colors.length); //4  
                  var temp = colors.pop();
                  alert(temp);  //block
                  alert(colors.length);//3

               b. 對列方法(先進先出):push推入,shift取出, unshift塞入
                  var colors=["red","blue"];
                  colors.push("green"); //推入一項
                  colors[4]="block"; 
                  alert(colors.length); //4  
                  var temp = colors.shift();
                  alert(temp);  //red
                  alert(colors.length);//3
                
                  unshift和shift的功能剛好相反:他是在第一位添加數據項
                  
                  var colors = new Array();
                  var count = colors.unshift("red","green");
                  alert(count); //2
                  colors.unshift("block");
                  var item = colors.pop();
                  alert(item); //green
                  alert(colors.length);

              c. 重排序方法:reverse()和sort()
                  var values=[1,2,3,4,5,6];
                  values.reverse();
                  alert(values); //6,5,4,3,2,1
                  
                  //注意sort方法會調用每個數組的toString()轉型方法,然后得到字符串,然后再排序,就會出現以下情況:
                  var values = [0,15,1,10,5];
                  values.sort();
                  alert(values); //0,1,10,15,5
                  //不用說這種sort方法肯定不是最佳的方式。因此sort方法可以接收一個比較函數作為參數,和java的Comparable一樣的作用.
                  function compare(value1,valu2){
                      if(value1 < value2){
                          return -1;
                      }else if(value > value2){
                           return 1;
                      }else{
                            return 0;
                      }
                  }
                  values.sort(compare);
                  alert(values); //0,1,5,10,15
                  
              d. 常用方法
                  concat:兩個或更多數組組合而成的
                  join:返回字符串值,其中包含了連接到一起的數組的所有元素    values.join(",")    0,1,5,10,15
                  slice:返回一個數組的一段   values.slice(0,2);
                  splice:從一個數組中移除一個或多個元素   values.splice(0,2);
                  valueOf:返回指定對象的原始值

          5.使用Data類型
              a. 創建日期對象
                  var now = new Date();
                  var someData = new Date(Data.parse("May 25,2005"));            
                  var someData = new Date("May 25,2005");
          6.使用RegExp對象
              a. 創建RegExp對象(字面量方式創建)
                  var expression  = /pattern/flags;
                  這里面的pattern 就是就行匹配的正則表達示
                  這時面的flags包括以下幾種:g,i,m
                      g:表示全局模式(global),則將模式應用于所有字符串,而并非發現第一個匹配項就立刻停止。
                      i:表示不區分大小寫(case-insensitive),
                      m:表示多行模式(mutiline),即達到一行末尾時還會繼續查找下一行是否存在匹配項
                      例:var at = /at/g;    匹配at
                            var at2 = /[bc]at/gi;  匹配bat,cat。。。。并且不區分大小寫
                            var at3 = /.at/gi;   分有以at結尾的3個字母的字符串
                            注:
                                以下是javascript里面的轉義字符:(){}[]\|/^$.?*+  轉義方法:加\ 。如\\ \$
                            var at4 = /\.at/gi;  所有.at,不區分大小寫
              b. 使用RegExp構造函數創建
                  它接受兩個參數:一個是要匹配的字符串模式,可選的標志字符串。
                  var at5 = new RegExp("[bc]at","i");
                  由于RegExp函數模式的參數是字符串,所以在某些情況下要對字符串進行雙重轉義,如:
                  
              c. RegExp的屬性
                  >global:返回true/false,返回是否設置了g標志
                  >ignonecase:返回true/false,返回是否設置了i標志
                  >mutiline:返回true/false,返回是否設置了m標志
                  >lastIndex:開始搜索下一個匹配的位置,從0開始
                  >source:返回正則表達示
              d. RegExp的方法
                  >exec方法
                  var text = "mom and dad and bady";
                  var p = /mon( and dad( and bady)?)?/gi;
                  var m = p.exec(text); //返回匹配器
                  alert(m.index); //0
                  alert(m.input);//mom and dad and bady
                  alert(m[0]);//mom and dad and bady 相當于group(0)
                  alert(m[1]);// and dad and bady 相當于group(1)
                  alert(m[2]);// and bady 相當于group(2)
                  
                 >test方法
                  通常用于if語句,如果匹配返回true,否則返回false
                  var test="000-00-0000";
                  var p = /\d{3}-\d{2}-\d{4}/;
                  if(p.test(test)){alert("dd");}

              f. Function類型
                  a.函數的聲明
                      function test(index){}
                      var test = function(index){}
                      var test = new Function(index){} //不推薦
                      注:
                          >函數沒有重載功能,如果兩個函數一樣,他會直接將前面的方法
                  b. 函數內部屬性this和arguments
                  c. 每個函數都包括length和prototype屬性
                      length:接受參數的個數
                      prototype:原型對象,很重要
                  d. 每個函數都有兩個非繼承的方法:apply()和call()方法
                      >這兩個方法的用途都是在特定的作用域中調用函數,實際上等于設置函數體內this對象的值。
                      >首先,apply方法接受兩個參數:一個是在其中運行函數的作用域,另一個是參數數據(可以是Array實例,也可以是arguments對象)
                          function sum(num1,num2){
                              return num1+num2;
                          }
                          function callsum1(num1,num2){
                              return sum.apply(this,arguments); //傳入arguments對象
                          }
                          function callsum2(num1,num2){
                              return sum.apply(this,[num1,num2]); //傳入數組
                          }
                          alert(callSum1(10,10)); //20
                          alert(callSum2(10,10)); //20
                      >call()方法與apply()方法的作用相同,它們的區別僅在于接收參數的方式不同。對于call()方法來言,第一個參數是作用域沒有變量 ,變化的只是其余參數都是直接 傳遞跟函數的。
                          function callSum3(num1,num2){
                              return sum.call(this,num1,num2);
                          }
                          alert(callSum3(10,10));//20

                          //所以apply()和call()使用就看怎么使用方便來用了,如我們傳入的參數就是要傳調用的函數的參數,就可以直接作用apply(this,arguments);

                      >真正強大的地方是能夠擴充函數賴以運行的作用域<就是在后面運行的函數的作用域就是我傳進的作用域>
                          window.color = "red";
                          var o={color:"blue"}
                          function getColor(){
                              alert(this.color);
                          }
                      
                          getColor();                //red
                          getColor.call(this);     //red
                          getColor.call(widow);  //red;
                          getColor.call(0);         //blue;

              g.Boolean類型
                  a. 聲明
                      var b = true;
                      var b = new Boolean(true);
                      alert(b instanceof Boolean); //true
              
              h.Number類型
                  a. 聲明
                      var b1 = 2;
                      var b2 = new Number(2);
                      var b3 = (Number)"2";
              
              i.String類型
                  a. 聲明
                      var s1 = "dd";
                      var s2 = new String("dd');
                  b. 常用方法
                      charAt,concat, substring,indexOf,toLowerCase,toUpperCase等

              j.常用內置對象
                  a. URI編碼方法:encodeURI()和encodeURIComponent(常用)
                      比較:encodeURI()用于整個URL;encodeURIComponent用于URL中的某段進行編碼
                               encodeURI不會對本身的URL特殊字符進行編碼,例如冒號,正斜杠,問號和#號;而encodeURIComponent對所有非標準字符都要進行編碼
                              
                  b. URL解碼方法:decodeURI()和decodeURIComponent,基本操作同上
                  c.  isNan(), parseInt(), parseFloat()
                  d. eval()---功能最強大的一個方法
                      ECMAScript內部解析器一樣
                  e. Window對象
                  f.  Math類
                      min,max, ceil,floor,round,random               



          名稱: ?4C.ESL | .↗Evon
          口號: 遇到新問題?先要尋找一個方案乄而不是創造一個方案こ
          mail: 聯系我


          主站蜘蛛池模板: 田阳县| 万州区| 个旧市| 商南县| 南阳市| 勃利县| 乐昌市| 小金县| 天长市| 安泽县| 手机| 开阳县| 积石山| 金堂县| 舒城县| 颍上县| 沂源县| 无为县| 山西省| 黑龙江省| 木兰县| 墨竹工卡县| 黄山市| 阿拉善右旗| 沿河| 寿光市| 托克托县| 维西| 禹城市| 富蕴县| 平果县| 乌兰浩特市| 宿松县| 梁河县| 临西县| 淮北市| 桓台县| 凌云县| 兴文县| 临高县| 大渡口区|