#一、JavaScript简介
1.1 JavaScript简述
JavaScript是web页面中的一种脚本编程语言,也是一种通用的、跨平台的、基于对象和事件驱动并具有安全性的脚本语言。它不需要进行编译,而是直接嵌入在HTML页面中,把静态页面转变为支持用户交互并响应事件的动态页面。
1.2 JavaScript在HTMK中的应用
在网页中使用JavaScript有三种方法: 1、直接嵌入JavaScript代码;
3、通过链接调用函数
函数除了可以在响应事件中被调用之外,还可以在链接中被调用,在<a>标签中的href属性使用"JavaScript:函数名()"格式来调用函数,当用户单击这个链接时,相关函数将会被执行。下面的代码实现了通过链接调用函数。
运行程序,当用户单击“单击链接”后再页面弹出"我喜欢JavaScript!"。
2.5.3 函数的参数
定义函数时指定的参数为形式参数,简称为形参,调用函数时使用实际传递的值称为实际参数,简称实参;
function 函数名(形参1,形参2,...){
函数体
}
调用格式如下:
函数名(实参1,实参2,......)
通常,在定义函数时使用了多少个形参,在函数调用时就必须给出多少个实参,实参之间也必须用逗号分隔。
2.5.4 函数的返回值
对于函数调用,一方面可以通过参数向函数传递数据,另一方面也可以从函数获取数据,也就是说函数可以返回值。在JavaScript的函数中,可以使用return语句为函数返回一个值,其语法格式如下:return 表达式;
这条语句的作用是结束函数,并把其后表达式的值作为函数的返回值。例如,定义一个计算两个数的和的函数,并将计算结果作为函数的结果。
function sum(x,y){ var z=x+y; return z; } alert(sum(2,3));
函数返回值可以直接赋给变量或用于表达式中,也就是函数调用可以出现在表达式中,例如:将上例中函数的返回值赋给变量result,然后进行输出;代码如下:
function sum(x,y){ var z=x+y; return z; } var result = sum(2,3); alert(result);
案例:函数返回值的简单应用:
</form>
<script>
var result = compare(10,20); //调用函数并传递参数
if(result){ //为真弹出第一个数
alert("第一个数大于第二个数");
}else{
alert("第一个数小于第二个数");
}
</script>
2.5.5 嵌套函数
1、函数的嵌套定义
就是在函数内部再定义其他的函数。例如:
function onFun(){ //定义外部函数 function inFun(x,y){ //定义内部函数 alert(x+y); //输出两个参数的和 } inFun(1,5); //调用内部函数 } onFun(); //调用外部函数
注:虽然在js中允许函数的嵌套定义,但它会使程序的可读性降低。
2、函数的嵌套定义
在js中,允许在一个函数的函数体中对另一个函数进行调用,这就是函数的嵌套调用。例如:在函数b()中对函数a()进行调用。代码如下:
function a(){ alert("查不到这个了吗?不可能!") } function b(){ a() } b();
函数的嵌套调用的应用:
输出结果:参数分别为:60、59、61,参数的平均值为:60
```
2.5.6 递归函数
所谓递归函数就是在自身的函数体内调用自身。使用递归函数时一定要当心,处理不当将会使程序进入死循环;因此递归函数只在特定的情况下使用,例如处理阶乘问题,其语法格式如下:
function 函数名(参数1){
函数名(参数2);
}
例:递归函数的使用n!=(n-1)!*n ==>f(n)=f(n-1)*n
<script>
function f(num){ //定义递归函数
if(num<=1){ //如果num< = 1
return 1; //返回1
}else{
return f(num-1)*num; //调用递归函数
}
}
</script>
</head>
<body>
<script>
alert("10!的结果为:"+f(10)); //调用函数
</script>
在定义递归函数时需要以下两个必要条件。 (1)包括一个结束递归的条件 如上例中的if(num<=1)语句,如果满足条件则执行return 1 语句,不再递归。 (2)包括一个递归调用语句。 如上例中的return f(num-1)*num语句,用于实现调用递归函数。 2.5.7 变量的作用域 变量的作用域是指变量在程序中的有效范围,在该范围内可以使用该变量,变量的作用域取决于该变量是哪一种变量。 1、全局变量和局部变量 在JavaScript中,变量根据作用域分为全局变量和局部变量, 全局变量是定义在所有函数之外的变量,作用范围是该变量定义后的所有代码, 局部变量:定义在函数体内的变量,只有在该函数中,且该变量定义后的代码中才可以使用这个变量,函数的参数也是局部性的,只在函数内部起作用。 2、变量的优先级 如果在函数中定义了一个与全局变量同名的局部变量,那么该全部变量在函数体中将不起作用;
var a = "这是全局变量";
function send(){
var a = "这是局部变量";
document.write(a);
}
send(); //结果为:这是局部变量
3、嵌套函数中变量的作用范围 在嵌套函数中,外部函数中的变量可以在该函数体中以及嵌套的函数体中起作用,而嵌套函数中的变量不能在父级或父级以上的函数中起作用。例如:
function outFun(){
var a = "这是一个局部变量";
function inFun(){
b = "这是嵌套函数中1的变量";
document.write(a+"<br>");
document.write(b);
}
inFun();
}
outFun();
结果:这是一个局部变量
这是嵌套函数中1的变量
2.5.8 内置函数 在使用js语言时,除了可以自定义函数之外,还可以使用js的内置函数,这些内置函数是由js语言自身提供的函数;js中的一些内置函数如表所示; 1、数值处理函数
- parseInt() 将字符型转换为整型; 该函数主要将首位为数字的字符串转换为数字,如果字符串开头不是数字,那么将返回NaN。其语法格式如下: parseInt(string,[n]) string:需要转换为整型的字符串; n:用于指出字符串中的数据是几进制的数据。这个参数在函数中不是必须的,默认为10进制。
var str1 = "123abc";
var str2 = "abc123";
document.write(parseInt(str1)+"<br>");
document.write(parseInt(str1,8)+"<br>");
document.write(parseInt(str2));
//输出结果
123
83
NaN
- parseFloat() 将字符型转换为浮点型; 该函数主要将首位为数字的字符串转换为浮点型数字,如果字符串开头不是数字,那么将返回NaN parseInt(string,[n])
var str1 = "123.456abc";
var str2 = "abc123.456";
document.write(parseFloat(str1)+"<br>");
document.write(parseFloat(str2));
结果:
123.456
NaN
- isNaN() 主要用于检验某个值是否为NaN,其语法格式如下: isNaN(num) 参数说明:num:需要验证的数字。 说明:如果参数num为NaN,函数返回值为true;如果参数num不是NaN,返回值为false。
var num1 = 123;
var num2 = "123abc";
document.write(isNaN(num1)+"<br>");
document.write(isNaN(num2));
结果:
false
true
- isFinite()函数 该函数主要用于检验其参数是否有限,其语法格式如下: isFinite(num) num:需要验证的数字。 注:如果参数num是有限数字(或可以转换为有限数字),函数返回值为true;如果参数num是NaN或者无穷大,函数返回为false;
document.write(isFinite(123)+"<br>");
document.write(isFinite("123abc")+"<br>");
document.write(isFinite(1/0));
结果:true
false
false
2、字符串处理函数
(1)eval() 函数
该函数功能是计算字符串表达式的值,并执行其中的JavaScript代码。其语法格式如下:evaluate(string);
string:需要计算的字符串,其中含有要计算的表达式或要执行的语句。
例如,应用eval()函数计算字符串:
document.write(eval("3+6")); //返回9
document.write("
");
eval("x=5;y=6;document.write(xy)"); //计算表达式的值,返回值30;
(2)escape()函数
该函数用于将一些特殊字符(不包括字母和数字,以及、@、-、_、+、.和/)进行编码;可以将这些特殊字符转换为"%XX"格式的数字,XX表示该字符对应的ASCII码值的十六进制数,语法格式如下:
escape(string) 参数说明:string:需要进行编码的字符串;
document.write(escape("You & Me")); //You%20%26%20Me
(3)unescape()函数 用于对应用escape()方法编码后的字符串进行解码。它可以将字符串中"%XX"格式的数字转换为字符。语法格式如下:unescape(string) ;string:需要进行解码的字符串。
var str = escape("You & Me");
document.write(unescape(str)); //You & Me
(4)encodeURI() 函数 该函数用于将URI字符串进行编码。其语法格式如下: encodeURI(url) 参数说明:url:需要编码的url字符串;
var URI = "http://127.0.0.1:8848/htmlcss/arr.html?name=测试";
document.write(encodeURI(URI));
//http://127.0.0.1:8848/htmlcss/arr.html?name=%E6%B5%8B%E8%AF%95
(5)decodeURI()函数 用于对已编码的URI字符串进行解码;decodeURI(URI);uri:需要解码的字符串;是encodeURI()函数的逆向操作;
var URI = encodeURI("http://127.0.0.1:8848/htmlcss/arr.html?name=测试");
document.write(decodeURI(URI)); //http://127.0.0.1:8848/htmlcss/arr.html?name=测试
2.5.6 定义函数的其他方法 除了使用基本的function语句之外,还可以使用另外两种方式来定义函数,即使用匿名函数和Function()构造函数; 1、定义匿名函数 在表达式中直接定义函数,语法和function语句非常相似;格式: var 变量名 = function(参数1,参数2,...){ 函数体 }; 这种定义函数的方法不需要指定函数名,把定义的函数赋值给一个变量,后面的程序就可以通过这个变量来调用这个函数,这种定义函数的方法有很好的可读性。
var sum = function(x,y){
return x+y; //返回两个参数的和
};
alert(sum(10,20)); //调用函数 30
以上代码中定义了一个匿名函数,并把对它的引用存储在变量sum中,该函数有两个参数,分别为x和y,该函数的函数体为“return x+y”即返回参数x与参数y的和。 例L定义一个匿名函数,获取从1到给定参数之间的所有3的倍数。
var getOdd,i;
getOdd = function(num){
document.write("1到"+num+"之间所有3的倍数为:"); //输出字符串
for(i=1;i<num;i++){
if(i%3!=0){
continue;
}
document.write(i+"\n");
}
}
getOdd(20); //1到20之间所有3的倍数为:3 6 9 12 15 18
2、Function()构造函数 可以动态地创建函数。Function()构造函数的语法格式如下: var 变量名 = new Function("参数1","参数2",......"函数体"); function()构造函数中的所有参数和函数体都必须是字符串类型,因此一定要用双引号或单引号括起来;
var sum = new Function("x","y","alert(x+y);") ; //使用function构造函数
sum(10,20); //通过变量名调用函数
上述代码中,sum并不是一个函数名,而是一个指向函数的变量,因此,使用Function()构造函数创建的函数也是匿名函数,"alert(x+y);"是函数体; 案例:利用自定义函数向页面中输出自定义的表格:
<script>
function table(row,col){
var show = "";
//声明变量并初始化
show = "<table align='center' border='1' width='600'>"; //定义要输出的字符串
var bgcolor; //声明变量
for(i=1;i<=row;i++){
if(i%2 != 0){
bgcolor = "#fff"; //如果奇数行背景色为白色;
}else{
bgcolor = "#ddf"; //偶数行定义为浅蓝色
}
show += "<tr bgcolor= '"+bgcolor+"'>"; //连接字符串
for(j=1;j<=col;j++){ //内层循环.输出表格的列
show += "<td height='30'>第"+i+"行第"+j+"列</td>"; //定义要输出的表格文字
}
show += "</tr>";
}
show += "</table>";
return show;
}
</script>
</head>
<body>
<script>
var result = table(6,5); //调用函数并传递参数
document.write(result);
</script>