好好学一遍JavaScript 笔记(二)

来源:岁月联盟 编辑:exp 时间:2011-12-29


/**
             * encodeURI跟encodeURIComponent的区别在于encodeURI不对
             * 特殊字符进行编码如:冒号、前斜杠、问号和英镑符号.
             * 而encodeURIComponent则对它发现的所有非标准字符进行编码.
             */ 
            var d = "旦旦而学";  
            //这样的URL在后台转码获取过后就可以解决get方式提交的乱码问题了. 
            <%--var url = "<%=path%>/users.action?name="+encodeURI(d);--%> 
            //后台action或者servlet这样转码获取  
            //String Name=new String(URLDecoder.decode(request.getParameter("name"),"utf-8")); 
               
            alert(encodeURI(d));         
            alert(encodeURIComponent(d)); 
             
            /**
             * 自然还有解码方法:decodeURI跟decodeURIComponent
             * 
             */ 
            alert(decodeURI(encodeURI(d)));   
            alert(decodeURIComponent(encodeURIComponent(d))); 

javaScript——Math:

/**
             * 判断一组数中的最大值
             */ 
            var iMax = Math.max(3,5,56,7,13,79); 
            alert(iMax);   
             
            /**
             * 判断一组数中的最小值
             */ 
            var iMin = Math.min(3,5,56,7,13,79); 
            alert(iMin); 
             
            /**
             * 返回数字的绝对值
             */ 
            alert(Math.abs(-9)); 


/**
             * 把小数舍入成整数
             * ceil 表示向上取整
             * round 常规、4舍5入
             * floor 表示向下取整
             */ 
            alert(Math.ceil(25.1));  //out26 
            alert(Math.round(25.6));  //out26   
            alert(Math.floor(25.9));  //out25 


//常数;一个用作自然对数的底的数学常数,表示为 e。e 的近似值为 2.718281828459045。 
            //alert(Math.E); 
            /**
             * exp()方法用于把Math.E升到指定的幂(mi)
             * log()方法用于返回特定的数字的自然对数
             * pow()方法用户把指定的数字升到指定的幂
             * sqrt()返回指定数字的平方根 
             * acos(x)       返回x的反余弦值
             * asin(x)       返回x的反正弦值
             * atan(x)       返回x的反正切值
             * atan2(y,x)    返回y/x的反余弦值
             * cos(x)        返回x的余弦值
             * sin(x)        返回x的正弦值
             * tan(x)        返回x的正切值
             */ 
            alert(Math.log(Math.exp(12)));    
             
            alert(Math.pow(2,10));  //1024 
             
            /**
             * 数字的平方根就是它的2/1次幂
             * 2的2/1次幂就是2的平方根
             */ 
            alert(Math.sqrt(4));   


/**
             * Math的random()方法 
             * 该方法返回0到1之间的随机数、不包括0和1
             */ 
            alert(Math.random()); 
             
            /**
             * 返回iFirstValue到iLastValue的之间(包括)的随机数  
             * @param {Object} iFirstValue 起始值
             * @param {Object} iLastValue 结束值
             * @return {TypeName} 
             */ 
            function selectFrom(iFirstValue,iLastValue){ 
                var iChoices = iLastValue - iFirstValue + 1 ; 
                return Math.floor(Math.random() * iChoices + iFirstValue) ; 
            }  
            //返回1到9的随机数、包括1跟9 
            alert(selectFrom(1,9));   
             
            /**
             * 随机获取数组中的元素
             */ 
            var array = new Array(45,452,451,4,42,437,343);  
            alert(array[selectFrom(0,array.length-1)]);   

javaScript——创建对象(Object):
类工厂方式:

/**
             * 类工厂
             */ 
            function createCar(sColor,iDoors,iMpg){ 
                var oTempCar = new Object; 
                oTempCar.color = sColor; 
                oTempCar.doors = iDoors ; 
                oTempCar.mpg = iMpg ; 
                oTempCar.showColor = function(){ 
                    alert(this.color); 
                }; 
                return oTempCar ;   
            } 
            var oCar1 = createCar("red",5,33); 
            var oCar2 = createCar("blue",6,23); 
            alert(oCar1.color);   
            oCar2.showColor() ; 

类工厂方式二:

/**
             * 类工厂2
             */ 
            function showColor(){ 
                alert(this.color); 
            } 
             
            function createCar(sColor,iDoors,iMpg){ 
                var oTempCar = new Object; 
                oTempCar.color = sColor; 
                oTempCar.doors = iDoors ; 
                oTempCar.mpg = iMpg ; 
                oTempCar.showColor = showColor;   
                return oTempCar ;   
            }      
            var oCar1 = createCar("red",5,33); 
            var oCar2 = createCar("blue",6,23); 
            alert(oCar1.color);   
            oCar2.showColor(); 

构造函数:

/**
             * 构造函数
             * @param {Object} sColor
             * @param {Object} iDoors
             * @param {Object} iMpg
             * @memberOf {TypeName} 
             */ 
            function Car(sColor,iDoors,iMpg){ 
                this.color = sColor; 
                this.doors = iDoors ; 
                this.mpg = iMpg ; 
                this.showColor = function(){ 
                    alert(this.color); 
                }; 
            }    
            var oCar1 = new Car("red",5,33); 
            var oCar2 = new Car("blue",6,23); 
            alert(oCar1.color);   
            oCar2.showColor(); 

原型方式:

/**
             * 原型方式
             */ 
            function Car(){ 
            } 
            Car.prototype.color = "red"; 
            Car.prototype.doors = 2 ; 
            Car.prototype.mpg = 23 ; 
            Car.prototype.array = new Array(1,2); 
            Car.prototype.showColor = function(){ 
                alert(this.color); 
            }; 
            var oCar1 = new Car(); 
            var oCar2 = new Car(); 
            oCar1.color = "blue"; 
            oCar1.array.push(3,4) ;  
            alert(oCar1.color);     
            alert(oCar2.color);  
               
            //由于Array是引用值、array都指向同样数组 
            alert(oCar1.array); 
            alert(oCar2.array); 

联合使用构造函数和原型方式:

/**
             * 联合使用构造函数和原型方式、就可像用其他程序设计语言一样创建对象。
             * 这种概念非常简单、即用构造函数定义对象的所有非函数属性、用原型方式定义对象的函数属性(方法)。
             * 结果所有函数都只创建一次、而每个对象都具有自己的对象属性实例。  
             */ 
            function Car(sColor,iDoors,iMpg){ 
                this.color = sColor; 
                this.doors = iDoors ; 
                this.mpg = iMpg ; 
                this.array = new Array(1,2); 
                this.showColor = function(){ 
                    alert(this.color); 
                }; 
            }  
            Car.prototype.array = function (){ 
                alert(this.color);   
            };    
            var oCar1 = new Car("red",5,33); 
            var oCar2 = new Car("blue",6,23); 
            oCar1.array.push(4,9); 
            alert(oCar1.array);   
            alert(oCar2.array); 

动态原型方法:

/**
             * 动态原型方法
             */ 
            function Car(sColor,iDoors,iMpg){ 
                this.color = sColor; 
                this.doors = iDoors ; 
                this.mpg = iMpg ; 
                if(typeof Car._initialized == "undefined"){ 
                    Car.prototype.showColor = function(){ 
                        alert(this.color);  
                    }; 
                    Car._initialized = true ; 
                } 
            }      
            var oCar1 = new Car("red",5,33);    
            var oCar2 = new Car("blue",6,23);   
            alert(oCar1.color);   
            oCar2.showColor(); 

混合工厂方式:

/**
             * 混合工厂方式
             */ 
            function Car(){ 
                var oTempCar = new Object; 
                oTempCar.color = "red"; 
                oTempCar.doors = 2 ; 
                oTempCar.mpg = 23 ; 
                oTempCar.showColor = function(){    
                    alert(this.color);  
                }; 
                return oTempCar ;   
            } 
            var oCar1 = new Car(); 
            var oCar2 = new Car();     
            alert(oCar1.color);   
            oCar2.showColor(); 

利用json创建对象:

/**
            * 利用json创建对象
            */ 
           var Car = {}; 
           Car.color = "red"; 
           Car.doors = 2; 
           Car.mpg = 23; 
           Car.array = new Array(1,2); 
           Car.showArray = function(){ 
             alert(this.array);   
           }; 
          var oCar = Car; 
          oCar.showArray(); 

目前使用最广泛的是混合的构造函数/原型方式。此外、动态原型方法也很流行、
在功能上与构造函数/原型方式等价。可采用这两种方式的任何一种、
不过不要单独使用经典的构造函数或原型方式、因为这样会给代码引入问题。

摘自 旦旦而学的专栏