函数的作用是,可以写一次代码,然后反复地重用这个代码。
function add2(a,b){
sum = a + b;
alert(sum);
} // 只需写一次就可以
add2(3,2);
add2(7,8);
.... //只需调用函数就可以
常见函数:
String
Number
Date
Array
数据类型转换总结:
定义函数
function 函数名( )
{
函数体;
}
特点:
不需要申明返回值类型
可以有也可以没有返回值
返回值可以为任何类型
带参数的方法:
function f(a, b){
}
f(2,"abc");//undefined
function f(a, b){
return a+b;
}
s = f(2,"abc");//"2abc"
作用域
f();//位置①可以
function f(){
alert("f");
}
f();//位置②可以
t();//位置①不可以
var t = function(){
alert("t");
}
t();//位置②可以
二者的区别在于作用域的不同!
函数可传递性
var f1 = function(){}
var f2 = f1;
f2();
函数中的arguments对象
1、在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。arguments非常类似Array,但实际上又不是一个Array实例。
<script type="text/javascript">
Array.prototype.testArg="test"; // object.prototype.name=value,prototype属性使得Array有能力给对象添加了一个自定义属性testArg,如果arguments是Array的实例那么它就能调用这个自定义属性
function funcArg(){
alert(funcArg.arguments.testArg); //输出:"undefined"说明arguments并不是Array对象的一个实例
alert(funcArg.arguments[0]); //输出10,注意funcArg()并没有形式参数接收下面funcArg(10)传递过来的实参,但是funcArg.arguments[0]还是输出了传递过来的实参的值,
//所以说明arguments是由实参决定并影响的。
}
alert(new Array().testArg); //输出test
funcArg(10); //输出:"undefined",10
</script>
2、arguments对象的长度是由实参个数而不是形参个数决定的。形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠。对于arguments和值都存在的情况下,两者值是同步的,但是针对其中一个无值的情况下,对于此无值的情形值不会得以同步。
function f(a, b, c){
alert(arguments.length); // result: "2"
a = 100;
alert(arguments[0]); // result: "100"
arguments[0] = "qqyumidi";
alert(a); // result: "qqyumidi"
alert(c); // result: "undefined"
c = 2012;
alert(arguments[2]); // result: "undefined"
}
f(1, 2);
3、
第一:Javascript函数的声明是没有返回值类型这一说法的;
第二:JavaScript中形参的个数严格意义上来讲只是为了方便在函数中的变量操作,实际上实参已经存储在arguments对象中了;
第三:由JavaScript中函数的声明和调用特性,可以看出JavaScript中函数是不能重载的。
4、arguments对象中有一个非常有用的属性:callee。arguments.callee返回此arguments对象所在的当前函数引用。在使用函数递归调用时推荐使用arguments.callee代替函数名本身。
function count(a){
if(a==1){
return 1;
}
return a + arguments.callee(--a);
}
var mm = count(10);
alert(mm);//55
String
常用方法:
substring(start, end);
charAt(number); //返回的是字符串,不是字符
indexOf(number);
charCodeAt(number);//将指定位置字符串转换为Unicode编码;
String中的转义字符
字符串到数字的转换
parseInt(“3 string micc”);//返回数字3
parseFloat(“3.14 tostri”);//返回3.14
parseInt(“12.2”);//返回12
parseInt(“077”,8);//8进制转换成10进制,返回63=7*8+7
parseInt(“077”);//返回77
parseInt(“0XFF”);//返回255,十六进制
parseInt(“11”,2);//2进制转换成10进制,返回 3= 1*2+1
parseInt(“bbb”);//返回NaN
其他进制转换成十进制
parseInt(numstring, [radix])
numstring 必选项。要转换为数字的字符串。
radix 可选项。在 2 和 36 之间的表示 numstring 所保存数字的进制的值。如果没有提供,则前缀为 ‘0x’ 的字符串被当作十六进制,前缀为 ‘0’ 的字符串被当作八进制。所有其它字符串都被当作是十进制的。
parseInt(077);//63
parseInt(12, 8);//10
parseInt("a", 16);//10
parseInt(0XFF);//255
十进制转换成其他进制
objectname.toString([radix])
objectname 必选项。要得到字符串表示的对象。
radix 可选项。指定将数字值转换为字符串时的进制。
例如:
var m = 10;
parseInt(m.toString(2)) ; // 先是” 1010”,然后转换成1010
parseInt(m.toString(8)); // 先是 “12 ” ,然后转换成12
parseInt(m.toString(10)); // 先是 “10 ” ,然后转换成10
parseInt(m.toString(16) );//先是 “a” ,然后是NaN
Number
数字转换为字符串表示
var x = 10;
x.toString(2);
x.toString(8);
x.toString(n); //n表示将数字以什么进制表示
Date
var now = new Date();
now.getFullYear()+"年";
(now.getMonth()+1)+"月";
now.getDate()+"日";
now.getHours()+"时";
now.getMinutes()+"分";
now.getSeconds()+"秒";
now.getTime();//返回距 1970 年 1 月 1 日之间的毫秒数
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>定义函数</title>
<script type="text/javascript">
function sub2() //定义函数
{
sub=5-2;
alert("5和2的差:"+sub);
}
</script>
</head>
<body>
<form>
<input type="button" value="点击我" onclick="sub2()" />
</form>
</body>
</html>
有参数的函数
function 函数名(参数1,参数2)
{
函数代码
}
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>函数传参</title>
<script type="text/JavaScript">
function add(x,y,z)
{
sum = x + y +z;
document.write(x+"、"+y+"、"+z+"和:"+sum+"<br/>");
}
add(5,8,3);
add(7,1,4);
</script>
</head>
<body>
</body>
</html>
返回值的函数
function add2(x,y)
{
sum = x + y;
return sum; //返回函数值,return后面的值叫做返回值。
}