JavaScript中的全局变量与局部变量

        <script type="text/javascript">
         for(var x=0; x<3; x++){//在脚本片段中定义的变量,是全局变量。
             document.write("x="+x);
         }
         function show(){
             var x = 6;//局部变量。
         }
         document.write("x======="+x);
         
         var x = 3;//全局变量x.
         
         function show(x){//函数局部的变量x
             x=8;
         }
         show(x);
         document.write("x==="+x);//x=3;
        </script>
        
        <script type="text/javascript">
            document.write("x---"+x);//全局变量在整个javascript甚至整个页面都有效。
        </script>

演示Object对象

        <script type="text/javascript">
            function show(){
               alert("show...run");
            }
            alert(show.toString());//对象.toString();将对象变成字符串。    
            
            var arr = [1,2,3,4,5];
            alert(arr.toString());
            
            var abc = function(){
                alert("abc run");
            }
            alert(abc);
            alert(abc.valueOf());//对象.toString();返回对象的原始值,与toString大同小异。
    </script>
-------------------------------------------------------------------------------------------

out.js文件

//打印指定参数数据到页面上,并换行。
function println(param){
    document.write(param+"<br/>");
}

//打印指定参数数据到页面上。
function print(param){
    document.write(param);
}
-------------------------------------------------------------------------------------------

stringtool.js文件

//字符串新功能,去除字符串两端的空格。
String.prototype.trim = function(){
    var start,end;
    start=0;
    end=this.length-1;

    while(start<=end && this.charAt(start)==' '){
        start++;
    }
    while(start<=end && this.charAt(end)==" "){
        end--
    }
    return this.substirng(start,end+1);
}

//添加一个将字符串转成字符数组的新功能。
String.prototype.toCharArray = function(){
    //定义一个数组。
    var chs = [];
    //将字符串中的每一位字符存储到字符数组中。
    for(var x=0; x<this.length; x++){
        chs[x] = this.charAt(x);
    }
    return chs;
}

//添加一个将字符串进行反转的方法。
String.prototype.reverse = function(){
    var arr = this.toCharArray();

    //将数组位置置换功能进行封装。并定义到了反转功能内部。
    function swap(arr,a,b){
        var temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }

    for(var x=0,y=arr.length-1; x<y; x++,y--){
        swap(arr,x,y);
    }
    return arr.join("");
}
-------------------------------------------------------------------------------------------

演示string对象。

    <script type="text/javascript" src="out.js"></script>
    <script type="text/javascript" src="stringtool.js"></script>
    <script type="text/javascript">
    /*
     *表现形式:
     *var str = new String("abc");
     *var str = "abc";
     */
    var str = "abcde";
    
    println("len="+str.length);
    println(str.bold());//加粗
    println(str.fontcolor("red"));//字体颜色。
    println(str.link("http://www.163.com"));//将字符串变成超链接。
    println(str.substr(1,3));//bcd 从1开始,截取3个。第二个元素可以指定,也可以不指定。
    println(str.substring(1,3));//bc 取头到尾,不包含尾

    /*
     *发现js中的string对象方法有限,想要对字符串操作的其他功能。
     *比如:去除字符串两端的空格。这时只能自定义。
     */
    //去除字符串两端的空格。
    function trim(str){
        //定义两个变量,一个记录开始的位置。一个记录结束的位置。
        //对开始的位置的字符进行判断,如果是空格,就进行递增,直到不是空格为止。
        //对结束的位置的字符进行判断,如果是空格,就进行递减,直到不是空格为止。
        //必须要保证开始<=结束,这样才可以进行截取。

        var start,end;
        start=0;
        end=str.length-1;

        while(start<=end && str.charAt(start)==' '){
            start++;
        }
        while(start<=end && str.charAt(end)==" "){
            end--;
        }
        return str.substring(start,end+1);
    }
    var s = "   ab c     ";
    alert("-"+trim(s)+"-");
    alert("abc".bold());//<b>this</b>

    /*
     *既然trim方法是用来操作字符串的方法,可不可以像字符串已有的方法一样,
     *将该方法也定义到字符串对象中呢?直接用字符串对象调用就欧了。
     */

    /*
     *这里就可以使用一个该字符串的原型属性来完成。
     *原型:就是该对象的一个描述。该描述中如果添加了新功能。
     *那么该对象都会具备这些新功能。
     *而prototype就可以获取到这个原型对象。
     *通过prototype就可以对对象的功能进行扩展。
     *
     *
     *需求:想要给string对象添加一个可以去除字符串两端空格的新功能。
     *就可以使用原型属性来完成。
     */
    //给string的原型中添加一个功能。注意:给对象添加新功能直接使用对象.新内容即可。
    //String.prototype.len = 199;//给string的原型对象中添加一个属性名为len。值为199.

    println("abc".len);
    alert("-"+"    ab cd   ".trim()+"-");
    
    </script>
-------------------------------------------------------------------------------------------

原型练习:

    <script type="text/javascript" src="outT.js></script>
    <script type="text/javascript" src="stringtoolT.js"></script>

    <script type="text/javascript">
    //练习1,给字符串添加一个功能,将字符串变成一个字符数组。
    //练习2,给字符串添加一个功能,将字符串进行反转。

    var str = "abcdefg";
    println(str.toCharArray());
    println(str.reverse());
    println(str.toString());
-------------------------------------------------------------------------------------------
演示数组。

       <script type="text/javascript" src="outT.js"></script>
        <script type="text/javascript">
          
           var arr = ["nba","haha","cba","aaa","abc"];
           
           var arr2 = ["qq","xiaoqiang",70];
           
           println(arr);
           println(arr2);
           //在arr数组上连接一个元素"mm",再连接一个arr2数组。
           //将mm作为新数组中的元素,将arr2数组中的元素也作为新数组中的元素。
           var newArr = arr.concat("mm",arr2);
           println(newArr);
        
           println(arr.join("-"));
           println(myJoin(arr,"+"));
            
            //模拟一下join的实现原理。
            function myJoin(arr,separator){
                var str="";
                for(var x=0; x<arr.length; x++){
                    if(x!=arr.length-1)
                        str += arr[x]+separator;
                    else
                        str += arr[x];
                }
                return str;
            }
            // println("<hr/>");
            // println(arr);
            // println(arr.pop());//删除并返回最后一个元素。
            // println(arr);
            // println(arr.reverse());
            // println(arr.shift());//删除并返回第一个元素。
            // println(arr);
            
            println("<hr/>");
            arr.sort();//数组自带的排序功能。
            println(arr);
             //从1开始删除,删除3个元素(包括1),并进行元素的替换。
            var temp = arr.splice(1,3,8080,9527,"xixixi","xiaoqiang");
            println(temp);
            arr.unshift("uuuu");//将指定的元素插入数组的开始位置。
            println(arr);
        </script>
-------------------------------------------------------------------------------------------

数组练习:用数组实现JS中的堆栈或队列数据结构。

<script type="text/javascript" src="outT.js"></script>
<script type="text/javascript">

    var arr = [];

    arr.unshift("abc1");
    arr.unshift("abc2");
    arr.unshift("abc3");

    println(arr);

//先进先出,队列数据结构。
//    println(arr.pop());
//    println(arr.pop());
//    println(arr.pop());
//先进后出,堆栈数据结构。
    println(arr.shift());
    println(arr.shift());
    println(arr.shift());
</script>
-------------------------------------------------------------------------------------------

arraytoolT.js文件
//数组获取最大值的方法。
Array.prototype.getMax = function(){

    var temp = 0;
    for(var x=1; x<this.length; x++){
        if(this[x]>this[temp]){
            temp = x;
        }
    }
    return this[temp];
}

//数组的字符串表现形式。
//定义toSring方法。相当于java中的复写。
Array.prototype.toString = function(){
    return "["+this.join(",")+"]";
}
-------------------------------------------------------------------------------------------

给数组添加新功能,使用到原型属性。

<script type="text/javascript" src="arraytoolT.js"></script>
<script type="text/javascript">
    var array = ["nba","haha","cba","aaa","abc"];
    var maxValue = array.getMax();
    println("maxValue:"+maxValue);
    println(array.toString());
</script>

-------------------------------------------------------------------------------------------

演示JS中的日期。Date

<script type="text/javascript" src="outT.js"></script>
<script type="text/javascript">
    var date = new Date();
    println(date);
    println(date.toLocaleString());//日期和时间
    println(date.toLocaleDateString());//只有日期

    /*
     * 为了简化对象调用内容的书写。
     * 可以使用js中的特有语句with来完成。
     * 格式:
     * with(对象)
     * {
     *    在该区域中可以直接使用指定的对象的内容。不需要写对象。
     * }
     */

    with(date){
        var year = getFullYear();
        var month = getMonth()+1;
        var day = getDate();
        var week = getWeek(getDay());

        println(year+"----"+month+"----"+day+"----"+week);
    }

    function getWeek(num){
        var weeks = ['星期天','星期一','星期二','星期三','星期四','星期五','星期六'];
        return weeks[num];
    }

    //日期对象和毫秒值之间的转换。
    var date2 = new Date();
    //获取毫秒值。日期对象-->毫秒值。
    var time = date2.getTime();
    println("time:"+time);
    //将毫秒值转成日期对象。
    var date3 = new Date(time);

    //将日期对象和字符串之间进行转换。
    //日期对象转成字符串。toLocaleString toLocaleDateString
    //将字符串转成日期对象。具备指定格式的日期字符串-->毫秒值-->日期对象。
    var str_date = "9/28/2017";
    var time2 = Date.parse(str_date);
    var date3 = new Date(time2);
    println(date3.toLocaleDateString());
</script>
-------------------------------------------------------------------------------------------

演示Math对象。该对象中的方法都是静态的。不需要new,直接Math调用即可。

<script type="text/javascript" src="outT.js"></script>
<script type="text/javascript">
    var num1 = Math.ceil(12.34);//返回大于等于指定参数的最小整数。
    var num2 = Math.floor(12.34);//返回小于等于指定参数的最大整数。
    var num3 = Math.round(12.54);//四舍五入
    println("num1="+num1);
    println("num2="+num2);
    println("num3="+num3);

    var num4 = Math.pow(10,2);//10的2次幂。
    println("num4="+num4);

    println("<hr/>");
    for(var x=0; x<10; x++){
        var num = parseInt((Math.random()*10+1));//Math.random()为0.0-0.9的伪随机数
        println(num);
    }
</script>
-------------------------------------------------------------------------------------------

演示global的全局方法。

<script type="text/javascript" src="outT.js"></script>
<script type="text/javascript">

    println(parseInt("123")+1);//124

    var val = parseInt("12abc");//val = 12;

    println("value="+val);//通过isNaN来判断结果是否非法。

    //将指定进制格式的字符串转成十进制。
    var num = parseInt("110",2);
    println("num="+num);

    var num1 = parseInt('0x3c',16);
    println("num1="+num1);

    //将十进制转成其他进制。使用数字对象完成。
    var num3 = new Number(6);
    println("num3="+num3.toString(2));

    var num4 = 60;
    println("num4="+num4.toString(16));

    /*
    js中的特有语句for in

    格式:
    for(变量 in 对象){}//对对象进行变量的语句。
    */

    var arr = [53,25,78];
    for(i in arr){
        println("i="+arr[i];
    }
</script>
-------------------------------------------------------------------------------------------

js自定义对象。

<script type="text/javascript" src="out.js"></script>
<script type="text/javascript">
    /*
    如果想要自定义对象,应该先对对象进行描述。
    js是基于对象,不是面向对象的。不具备描述事物的能力。
    我们还想按照面向对象的思想编写js。
    就要先描述,在js中,可以用函数来模拟面向对象中的描述。
    */
    /*
    //用js来描述人
    function Person(){//相当于构造器
        alert("person run");
    }
    //通过描述进行对象的建立。new
    var p = new Person();
    //动态给p对象添加属性。直接使用p.属性名即可。
    p.name = "zhangsan";
    p.age = 29;
    //如果定义p对象的属性赋值为一个函数,即是给p对象添加一个方法。
    p.show = function(){
        alert("show:"+this.name+":"+this.age);
    }
    p.show();

    var obj = new Object();
    obj.name = "god father";
    obj.age = 2013;
    alert(obj.name+":"+obj.age);
    */

    function Person(name,age){
        //给Person对象添加了两个属性。
        this.name = name;
        this.age = age;

        this.setName = function(name){
            this.name = name;
        }
        this.getName = function(){
            return this.name;
        }
    }

    var p = new Person("旺财",20);

    for(x in p){
        println(x+":"+p[x]);
    }

    p.setName("小强");
    alert(p.name);
    alert(p.getName());

    //直接使用{}定义属性和值得键值对方式。键值对通过:链接,键与键之间用逗号隔开。
    var pp = {
        "name":"小明","age":38,
        "getName":function(){
            return this.name;
        }
    }

    //对象调用成员有两种方式:对象.属性名 对象["属性名"]
    alert(pp["age"]+":"+pp.name);

    //用js实现键值对映射关系的集合容器。
    var oMap = {
        8:"小强",3:"旺财",7:"小明"
    }

    var val1 = oMap[8];
    alert("val1:"+val1);

    var val2 = get(7);
    alert("val2:"+val2);

    function get(key){
        return oMap[key];
    }

    var myobj = {
        myname:"lisisi",myage:30
    }
    alert(myobj.myname+":"+myobj["myage"]);

    var myobj2 = {
        "myname2":"hahaha","myage2":48
    }
    alert(myobj2.myname2+":"+myobj2["myage2"]);

    var myMap = {
        // names:["lisi1,","lisi2","lisi3"],nums:[26,75,16]
        names:[{name1:"zhangsan"},{myname:"hahahah"}]
    }
    alert(myMap.names[1]);
    alert(myMap.names[0].name1);
</script>