J2EE社区

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

第5章 引用类型

Posted on 2011-07-19 15:07 xcp 阅读(322) 评论(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: 联系我