PHP7实践指南:O2O网站与App后台开发
上QQ阅读APP看书,第一时间看更新

1.3 JavaScript简介

JavaScript是一种广泛用于客户端的语言,可插入HTML页面,常用来进行网页表单验证、实现网页的动态效果和网页交互等。伴随JavaScript诞生了很多优秀的框架,比如jQuery、AngularJs等。近年来,随着前端技术的快速发展,JavaScript越来越受开发者青睐。

在HTML文件中,JavaScript代码必须写在<script>和</script>之间,如果是采取引入外部JavaScript文件的形式,即在HTML文件中写入<script src='xxs.js'></script>,则在该JavaScript文件中不加入<script>标签。

1.3.1 JavaScript数据类型

JavaScript有字符串(string)、数字(number)、布尔(boolean)、数组(array)、对象(object)、空(null)、未定义(undefined)7种数据类型。JavaScript拥有动态类型,即相同的变量可用作不同的类型。

1.字符串

字符串是存储字符的变量。字符串可以是引号中的任意文本,可以使用单引号或双引号,例如:

        var name= 'chen xiaolong';
        var name="chen xiaolong";

下面介绍几个常用的字符串函数。

● indexOf () 查找特定字符在字符串中首次出现的位置。

        var str= 'hello, world';
        var n=str.indexOf('l');

返回n的值为2。如果没有找到字符串,那么返回值为-1。

● replace () 在字符串中用某些字符替换另一些字符。

        var str='hello, world';
        var newstr=str.replace('world','chenxiaolong');

此时newstr的值为‘hello, chenxiaolong'。

● split() 此函数可将字符串转换成数组。

        var str='a, b, c, d';
        var arr=str.split(',');

arr将会变成一个包含a, b, c, d的数组。

●slice() 提取字符串中的某一部分,并以新的字符串返回被提取的部分。

        var str='hello, world';
        var newstr=str.slice(2,5);

表示提取从str字符串的第2个位置到第5个位置的字符,此时newstr的值是‘lo'。

● charAt() 返回指定位置的字符。

        var  str='hello, world';
        var newstr=str.charAt(2);

此时newstr的值是‘l'。

2.数字

数字分为带小数点和不带小数点的两种。

        var n=11;
        var n=11.11;

极大和极小的数字可以使用科学技术法(指数)来书写。

        var n=123e5 ;   //表示 12300000
        var n=123-e5;  //表示 0.00123

下面介绍几个常用的Math方法。

● Math.ceil() 对一个数进行上舍入。

        var n=5.1;
        var newn=Math.ceil(n);

则newn的值为6。

● Math.floor() 对数字进行下舍入。

        var n=5.6;
        var newn=Math.floor(n);

此时newn的值为5。

● Math.round() 把数字四舍五入为最接近的整数。

        var n=Math.round(4.3);
        var nn=Math.round(4.6);

n的值为4, nn的值为5。

● Math.max() 返回两个指定数中较大的那个。

        var n=Math.max(4,8);

此时n的值为8。

● Math.cos() 返回一个数字的余弦值。

        var n=Math.cos(Math.PI);

n的值为1。Math.PI表示数学中的π。

● Math.random() 返回0到1之间的一个随机数。

        var n=Math.random();

此时n的值可能是一个类似0.6744568887788值。

3.布尔值

布尔(逻辑)只能有两个值:true和false。

        var x=true;
        var y=false;

布尔值常用在条件测试if语句中。

4.数组

数组是JavaScript中非常重要且常用的数据类型,可使用下面的代码创建一个数组:

        var person=new Array();
        person[0]='john';
        person[1]='ricky';
        person[2]='evan';

或者用

        var person=new Array('john', 'ricky', 'evan')

或者用

        var person=['john', 'ricky', 'evan'];

这样3种创建数组的方法。

下面介绍几个常用的数组对象方法。

● pop() 删除并返回数组的最后一个元素。

以上面的person数组为例,以下所有的例子都使用上面创建的person数组。

        var n=person.pop();

此时返回的n值为‘evan'。

● push() 向数组的末尾添加一个或多个元素,并返回新的长度。

        var n=person.push('thomas');

此时n的值为4。

● shift() 删除并返回第一个数组元素的值。

        var n=person.shift();

此时n的值为‘john'。

● unshift() 向数组的开头添加一个或更多元素,并返回新的长度。

        var n=person.unshift('shallon');

此时n的值为4。

● join() 将数组中所有元素放入一个字符串,并返回该字符串。

        var n=person.join('。');

此时n为‘john。ricky。evan'。

5.对象

JavaScript对象由花括号分割,在括号的内部,对象的属性以名称和值对的形式来定义,属性由逗号分割。

        var person={
        name : 'john',
        age : 15,
        gender : 'male',
        }

对象属性有两种寻址方式,person.name和person['name']得到的值都是‘john'。

6. undefined和null

undefined表示变量不含值,如果要将变量清空,可将变量值设为null。

        person=null;

1.3.2 JavaScript基本语句

JavaScript语句用分号分割,分号是可选的。浏览器按照代码的编写顺序依次执行每条语句,本小节介绍if、switch、while、break和continue几种语句。

1. if条件语句

条件语句基于不同的条件来执行不同的动作,只有当if后面括号内的内容为true时,才执行紧邻的大括号里的代码块。

例如:

            if(1<2){
                  alert('yes');
                    }else{
                  alert('no');
                  }

判断if括号里的内容正确,所以会在浏览器弹窗显示‘yes', else后面的代码块只在if条件为false时才执行,例如:

        if(11<10){
        alert('good morning');
        } else {
        alert('good evening');
        }

还可以继续在代码中增加else if来判断多种不同的情形,例如:

        var test=5;
        if (test<5){
            alert('test小于5');
        }else if( test>=5&&test<10){
            alert('test大于等于5但是小于10');
        }else if (test>=10&&test<20){
            alert('test大于等于10 但是小于20');
        }else{
            alert('test大于等于20');
        }

2. switch语句

switch语句可以判断当前变量值的多种可能,选择执行代码块,语法如下:

        switch(n)
        {
        case 1:
          执行代码块 1
        break;
        case 2:
          执行代码块 2
        break;
        default:
        n与case 1和case 2不同时执行的代码
        }

首先设置表达式n(通常是一个变量),随后表达式的值会与结构中每个case的值做比较,如果存在匹配,则与该case关联的代码块会被执行。注意在每个case后面的代码块中须使用break阻止继续向下执行case语句。下面的一个例子显示今天的星期名称,请注意Sunday=0, Monday=1, Tuesday=2,等等。

        var day=new Date().getDay();
        switch (day)
        {
        case 1:
          x="Today it's Monday";
          break;
        case 2:
          x="Today it's Tuesday";
          break;
        case 3:
          x="Today it's Wednesday";
          break;
        case 4:
          x="Today it's Thursday";
          break;
        case 5:
          x="Today it's Friday";
          break;
        default:
          x="Today it's weekend';
        }

程序会根据当前情况判断日期为多少,此时x的值是‘Today it's Wednesday',当规定没有匹配到,则执行default部分的代码。

3.循环语句

JavaScript支持不同类型的循环:

● for:循环代码块一定的次数。

● for/in:循环遍历对象的属性。

● while:当指定的条件为true时循环指定的代码块。

●do/while:当指定的条件为true时循环指定的代码块。

(1)for循环

for循环是创建循环时常会用到的工具。

语法:

        for (语句 1;语句 2;语句 3)
          {
          被执行的代码块
          }

● 语句1循环(代码块)开始前执行。

● 语句2定义运行循环(代码块)的条件。

● 语句3在循环(代码块)已被执行之后执行。

实例如下:

        for (var i=0; i<5; i++)
          {
          x=x+"The number is "+i+"<br>";
          }

从上面的例子中,可以看到:

● 语句1在循环开始之前设置变量(var i=0)。

● 语句2定义循环运行的条件(i必须小于5)。

● 语句3在每次代码块已被执行后增加一个值(i++)。

(2)for/in循环

for/in语句循环用来遍历对象的属性。

实例如下:

        var person={fname:"John", lname:"Doe", age:25};//声明一个pesson对象
        var txt='';
        for (x in person)       //循环遍历
          {
          txt=txt+person[x];
          }
        alert(txt);

本例中var声明了一个person对象,使用for循环遍历这个对象获得对象属性。执行这段程序将会在浏览器弹窗显示JohnDoe25。

(3)While循环

While循环会在指定条件为true(真)时循环执行代码块。

语法:

        while (条件)
          {
          需要执行的代码
          }

请看如下实例,只要变量i小于5循环就将一直运行。

        while (i<5)
          {
          x=x+"The number is "+i+"<br>";
          i++;
          }

如果忘记增加条件中所用变量i的值,循环条件i<5将会永远为真,该循环永远不会结束,这可能导致浏览器崩溃。

(4)do/While循环

do/while循环是while循环的变体。该循环至少会执行一次循环体中的代码块,然后检查条件是否为true(真),如果条件为true(真),就会重复这个循环,否则跳出循环。

语法:

        do
          {
          需要执行的代码
          }
        while (条件);

下面的例子使用do/while循环,即使条件是false(假),该循环也至少会执行一次,因为代码块会在条件被测试前执行:

        do
          {
          x=x+"The number is "+i+"<br>";
          i++;
          }
        while (i<5);

4. Break和Continue语句

break语句用于终止循环,continue语句用于跳过循环中的一个迭代。

Break语句的使用方法如下:

        for (i=0; i<10; i++)
          {
          if (i==3)
            {
            break;
            }
          x=x+"The number is "+i+"<br>";
          }

本例中,当循环到i=3时,终止循环。

Continue语句的使用方法如下:

        for (i=0; i<=10; i++)
         {
         if (i==3) {continue;
          x=x+"The number is "+i+"<br>";
            }
          }

本例中,当i=3时,将跳出循环。

1.3.3 JavaScript函数和事件

本小节介绍JavaScript的函数和事件,可以将一段代码定义成函数,这样在以后使用的时候就可以直接调用,JavaScript的事件则可以实现网页和用户的交互。

1.函数

JavaScript使用关键字function定义函数,其语法格式如下:

        function functionName(parameters){
          代码部分
        }

说明:这里定义了一个名为functionName的函数,parameters为函数参数。

函数在需要的时候被调用。例如,定义一个add函数:

        function add(a, b) {
         return a + b;
        }

本例中,如果给add函数传的两个参数都是数字类型,就返回两个参数的和;如果两个或其中一个是字符串类型,则此时的+是连字符,函数返回的是拼接后的字符串。关于JavaScript函数的更多用法可查阅相关资料。

2.事件

JavaScript通过操作HTML DOM做出事件反应,在HTML页面应用JavaScrip事件的例子如下:

        <html>
        <head>
        <title></title>
        </head>
        <body>
        <h1 onclick='clickFunction(this)'>click here</h1>
        </body>
        <script type="text/javascript">
        function clickFunction(e){
            e.innerHTML='change';
        }
        </script>
        </html>

当单击文字click here时,其中的内容将会变成change, JavaScript中事件的用法便是如此。JavaScript事件列表如表1-6所示。

表1-6 JavaScript事件列表

(续表)

1.3.4 常用的JavaScript框架和库

JavaScript有很多优秀的框架和库,通过使用这些框架和库能简化开发流程,提高开发效率。

1. jQuery

jQuery是一个无须介绍的库。它凭一己之力让跨浏览器网站使用成为现实,同时把Web带到今天的位置。Web标准已经被大多数浏览器制造商采纳并真正地尊重,jQuery是其中的原因之一。jQuery是世界上最常用的JavaScript库,使得DOM遍历、事件处理、动画、Ajax在所有浏览器上变得更简单、更容易。

2. AngularJS

Angular是流行的企业级框架,许多开发人员都在使用它来构建和维护复杂的Web应用程序。Angular的人气非常高,很多企业都在使用。Angular是一个由谷歌支持的开源框架。Angular自称是HTML的一个扩展,用来构建复杂的Web应用程序。

3. React

React是近年最受欢迎的JavaScript项目,是一个开源软件,主要由Facebook开发,其他大型科技公司也有贡献。React自称是一个用于构建用户界面的JavaScript库。React主要是MVC中的V。它的重点完全在MVC的V部分,忽视应用程序架构的其余部分。它提供了一个组件层,使得创建UI元素、组合元素变得更容易。它使用虚拟DOM,因此优化了渲染,且允许从node.js渲染React。此外,它实现了单向响应的数据流,因此比其他框架更容易理解和使用。

4. Backbone

Backbone是一个著名的简易框架,适合单个JavaScript文件。Backbone已经存在有一段时间了。对于一些为小型Web应用寻找一个结构简单的框架而不想引入像Angular似的大型框架的团队,Backbone特别受欢迎。Backbone提供了一个完整的MVC框架及路由,模型允许键-值绑定和数据变化的事件处理,模型(和集合)可以连接到RESTful API,视图具有声明式事件处理,路由在处理URL和状态管理上做得很出色。它包含你创建一个单页面应用程序所需要的一切,且没有提供太多东西,没有不必要的复杂度。