JavaScript高级程序设计读书笔记(2)

1.变量、作用域和内存问题

1.1引用变量动态添加属性

        <script type="text/javascript">
            var p=new Object();
            p.age=12;
            alert(p.age);
        </script>


1.2传递参数

JavaScript中参数都是按照值传递的

        <script type="text/javascript">
            function swap(x,y){
                var temp=x;
                x=y;
                y=temp;
            }    
            var a=10,b=20;
            swap(a,b);
            alert(a+"..."+b);//10...20    
        </script>


对象中的值传递

        <script type="text/javascript">
            function change(obj){
                obj.name="zhangsan";
                obj =new Object();
                obj.name="lisi";
            }    
            var person =new Object();
            person.name="hello";
            change(person);
            alert(person.name);//zhangsan
        </script>

函数内部重写obj时,这个变量引用的就是一个局部对象了,这个局部对象会在函数执行完毕后销毁。

1.3检测类型

对于引用类型,typeof只能检测是否是对象。因此,JavaScript提供了instanceof操作符。

2.引用数据类型

2.1创建引用对象的实例

创建引用对象的实例与两种方式

方式1

        <script type="text/javascript">
            var person=new Object();
            person.name="zhangsan";
            person.age=21;
        </script>

var person={}等价于var person=new Object() 

方式2

        <script type="text/javascript">
            var person={
                name:"zhangsan",
                age:21
            }            
        </script>


JavaScript可以使用方括号访问属性

alert(person["name"]);

3.Array类型
栈方法

        <script type="text/javascript">
            var colors =new Array();
            var count =colors.push("red","green");
            alert(count);//2
            count =colors.push("black");
            alert(count);//3
            var item=colors.pop();
            alert(item);//black
            alert(colors.length);//2
        </script>

队列方法

        <script type="text/javascript">
            var colors =new Array();
            var count =colors.push("red","green");
            alert(count);//2
            count =colors.push("black");
            alert(count);//3
            var item=colors.shift();
            alert(item);//red
            alert(colors.length);//2
        </script>


2

        <script type="text/javascript">
            var colors =new Array();
            var count =colors.unshift("red","green");
            alert(count);//2
            count =colors.unshift("black");
            alert(count);//3
            var item=colors.pop();
            alert(item);//green
            alert(colors.length);//2
        </script>

concat()方法

        <script type="text/javascript">
            var colors =["red","green","blue"];
            var colors2=colors.concat("yellow",["white","black"]);
            alert(colors);//red,green,blue
            alert(colors2);//red,green,blue,yellow,white,black
        </script>

slice()截取数组  包含头不包含尾

splice()方法:起始位置,0,要插入的项。如果要插入多个项,可以传入第四、第五个参数。

删除:指定2个参数:要删除的第一项的位置和要删除的项数。

插入:提供3个参数,

替换:向指定位置插入任意数量的项,且同时删除任意数量的想。指定3个参数:起始位置、要删除的项数和要插入的任意数量的项。

        <script type="text/javascript">
            var colors =["red","green","blue"];
            var colors2=colors.concat("yellow",["white","black"]);
            alert(colors);//red,green,blue
            alert(colors2);//red,green,blue,yellow,white,black
            alert(colors2.splice(0,1));//red
            colors2.splice(0,0,"pink")
            alert(colors2);//pink,green,blue,yellow,white,black
            colors2.splice(2,1,"orange");
            alert(colors2);//pink,green,orange,yellow,white,black
        </script>

4. Date类型

创建一个Date对象

        <script type="text/javascript">
            var now = new Date();
            alert(now);//Sat Aug 25 2012 10:59:49 GMT+0800
        </script>

简化时间参数方法Date.parse()和Date.UTC

5.Regex类型

基本语法

var expression=/parttern/flags

6.Function类型

匿名方法

        <script type="text/javascript">
            var sum =function(a,b){
                return a+b;
            }
            alert(sum(3,4));//7
                
        </script>

通过Function创建函数

var sum =new Function ("a","b","return a+b");

函数声明与函数表达式:解析器率先读取函数声明,并使其在执行任何代码之前可用,至于函数表达式,则必须等到解析器执行到它所在的代码航,才会真正被解释执行。

        <script type="text/javascript">
            alert(add(3,4));
            function add(a, b){
            return a+b;//7
            }
                        
        </script>


下面代码将报错

        <script type="text/javascript">
            alert(add(3,4));
            var add=function(a, b){
            return a+b;
            }            
        </script>


将函数作为值

        <script type="text/javascript">
            function add(x, y){
            return x+y;
            }    
            function callFunction(a,b,c,d){
                return a(b,c)+d;
            }
            var number=callFunction(add,3,5,5);
            alert(number);
        </script>

输出结果:13
函数内部的两个对象:arguments和this

arguments对象有一个名叫做callee的属性,该属性是一个指针,指向拥有一个arguments对想的函数。

函数属性:length和prototype

函数内的方法apply()和call()。这两个方法的用途都是在特地那个的作用域调用函数。apply()方法接受两个参数:一个是在其中运行函数的作用域,另一个是参数数组。其中,第二个参数可以是Array的实例,也可以是arguments对象。

        <script type="text/javascript">
            function add(x, y){
            return x+y;
            }    
            function callFunction(a,b,c,d){
                return add.apply(this,arguments)+c+d;
            }
            var number=callFunction(3,3,5,5);
            alert(number);//16
        </script>


call()方法与apply()方法的作用相同,她们的区别仅在于接受参数的方式不同。使用call()方法时,传递给函数的参数必须逐个列举出来。

        <script type="text/javascript">
            function add(x, y){
            return x+y;
            }    
            function callFunction(a,b,c,d){
                return add.call(this,a,b)+c+d;
            }
            var number=callFunction(3,3,5,5);
            alert(number);//16
        </script>

7.基本包装类

JavaScript提供了三个包装类Boolean String 和Number

String类常用方法:charAt() charCodeAt()获取编码  [] 利用脚标访问字符

        <script type="text/javascript">
            var str="abcdefg";
            alert(str.charAt(1));//b
            alert(str.charCodeAt(1));//98
            alert(str[1]);//b
        </script>

concat()将一个或多个字符串连接在一起

        <script type="text/javascript">
            var str="abcdefg";
            alert(str.concat("hijk"));//abcdefghijk
        </script>

截取字符串 slice() substring substr()

        <script type="text/javascript">
            var str="abcdefg";
            alert(str.slice(1,3));//bc
            //substr 第二个参数是字符个数
            alert(str.substr(1,3));//bcd
            alert(str.substring(1,3));//bc
        </script>

获取字符位置indexOf

大小写转换toLowerCase toUpperCase

比较localeCompare()方法

frameCharCode()方法和charCodeAt()方法相反

8、Math类

ceil方法

floor方法

round方法

min()和max()方法

random方法

原文地址:https://www.cnblogs.com/malinkang/p/2655883.html