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