JavaScript语言基础

227 阅读10分钟

#一、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>