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方法