JavaScript+jQuery前端开发基础教程(微课版)
上QQ阅读APP看书,第一时间看更新

2.1 数据类型和变量

程序中最基础的元素就是数据和变量。数据类型决定了程序如何存储和处理数据,变量则是数据的“存储仓库”。

数据类型和变量

2.1.1 数据类型

JavaScript有3种基本数据类型:数值类型(number)、字符串类型(string)和布尔类型(boolean)。

1. 数值型常量

数值型常量可分为整型常量和实型常量。

整数可使用十进制、八进制和十六进制表示。

十进制是人们常用的计数进制,使用0~9之间的数码表示数值。

八进制整数以数字0开头,使用0~7之间的数码表示数值,例如05、010、017。

十六进制数以0x或0X开头,使用0~9、a~f、A~F之间的数码表示数值,例如0x5、0x1F。

在Firefox浏览器控制台中输入各种进制数据,输出为对应的十进制数,如图2-1所示。

图2-1 在浏览器控制台输入各种进制数据

实型常量指包含小数的数值,例如2.25、1.7。如果整数部分为0,JavaScript允许省略小数点前面的0,如0.25可书写为.25。

可用科学计数法表示实数,如1.25e-3、2.5E2。

JavaScript有几个特殊的数值。

• Infinity:Infinity表示正无穷大,-Infinity表示负无穷大。在数值除以0时就会出现无穷大。当一个值超出JavaScript的表示范围时,其结果就是无穷大。

• NaN:意思为“非数字”——Not a Number,表示数值运算时出现了错误或者未知结果。例如,0除以0的结果为NaN。

• Number.MAX_VALUE:最大数值。

• Number.MIN_VALUE:最小数值。

• Number.NaN:NaN。

• Number.POSITIVE_INFINITY:Infinity。

• Number.NEGATIVE_INFINITY:-Infinity。

【例2-1】 输出各种数值常量。源文件:02\test2-1.html。

…
<body>
    <script>
        document.write("输出整数常量:<br>")
        document.write("十进制100:")
        document.write(100)
        document.write("<br>八进制0100:")
        document.write(0100)
        document.write("<br>十六进制0x100:")
        document.write(0x100)
        document.write("<p>输出浮点数常量:<br>")
        document.write(125.25)
        document.write("<br>1.2e5:")
        document.write(1.2e5)
        document.write("<br>1.2E-5:")
        document.write(1.2E-5)
        document.write("<p>输出特殊常量:")
        document.write("<br>1/0:")
        document.write(1/0)
        document.write("<br>-1/0:")
        document.write(-1/0)
        document.write("<br>0/0:")
        document.write(0 / 0)
        document.write("<br>Number.MAX_VALUE:")
        document.write(Number.MAX_VALUE)
        document.write("<br>Number.MIN_VALUE:")
        document.write(Number.MIN_VALUE)
        document.write("<br>Number.NaN:")
        document.write(Number.NaN)
        document.write("<br>POSITIVE_INFINITY:")
        document.write(Number.POSITIVE_INFINITY)
        document.write("<br>Number.NEGATIVE_INFINITY:")
        document.write(Number.NEGATIVE_INFINITY)
    </script>
</body>
</html>

浏览器中的输出结果如图2-2所示。

图2-2 输出数值常量

2. 字符串常量

字符串常量指用英文的双引号(")或单引号(')括起来的一串字符,如"Java"、'15246'。

只能成对使用单引号或双引号作为字符串定界符,不能一个单引号一个双引号。如果需要在字符串中包含单引号或双引号,则应用另一个作为字符串定界符或者使用转义字符。例如,"I like 'JavaScript'"。

字符串中可以使用转义字符,转义字符以“\”开始。例如,“\n”表示换行符,“\r”表示回车符。表2-1列出了JavaScript中的转义字符。

表2-1 JavaScript中的转义字符

提示

在浏览器中,退格符、换行符、回车符和制表符等控制字符起不到应有的作用。例如,HTML的<br>标记才能在浏览器中起到换行作用。

【例2-2】 输出各种字符串。源文件:02\test2-2.html。

…
<body>
    <script>
        document.write("输出字符串:<br>")
        document.write("开始学'JavaScript'<br>")
        document.write("开始学\"JavaScript\"<br>")
        document.write("<br>八进制字符\\101:\101")
        document.write("<br>十六进制字符\\x45:\x45")
        document.write("<br>十六进制字符\\u0045:\u0045")
    </script>
</body>
</html>

浏览器中的输出结果如图2-3所示。

图2-3 输出字符串

3. 布尔型常量

布尔型常量只有两个:true和false(注意必须小写)。

4. null

null在JavaScript中表示空值、什么也没有。

5. undifined

用var声明一个变量后,其默认值为undifined。例如:

var a
document.write(a)      //输出结果为undifined

在浏览器控制台中测试输出,如图2-4所示。

图2-4 输出undifined

2.1.2 变量

变量用于在程序中存储数据,具有数据类型和作用范围。

1. 变量声明

JavaScript要求变量在使用之前必须进行声明(也可称为定义)。例如:

var a,b

该语句声明了两个变量a和b。

可以在声明的同时给变量赋值。例如:

var a =100,b=200

“=”表示赋值。

一种特殊情况是直接给一个未声明的变量进行赋值。例如:

ab = 100

此时,JavaScript会隐式地对变量ab进行声明。

JavaScript允许重复声明变量。例如:

var a = 100
var a = "abc"

重复声明时,如果没有为变量赋值,则变量的值不变。例如:

var a = 100
var a   //a的值还是100

2. 变量的数据类型

JavaScript是一种弱类型语言,即不强制变量的数据类型。存入变量的数据决定其数据类型。可以给一个变量赋不同类型的值。

【例2-3】 为变量赋值不同类型的数据,测试变量数据类型。源文件:02\test2-3.html。

…
<body>
    <script>
        var x = 123                  //将数值存入x
        document.write("x = ")
        document.write(x)
        document.write("  x的数据类型:")
        document.write(typeof (x))
       x = "abc"                    //将字符串存入x
        document.write("<br>x = ")
        document.write(x)
        document.write("  x的数据类型:")
        document.write(typeof (x))
        x = true                   //将布尔值存入x
        document.write("<br>x = ")
        document.write(x)
        document.write("  x的数据类型:")
        document.write(typeof (x))
    </script>
</body>
</html>

浏览器中的输出结果如图2-5所示。

图2-5 给变量赋值不同类型的数据

3. 变量的作用范围

作用范围是变量可使用的范围。根据作用范围可将变量分为两种:全局变量和局部变量。

局部变量和全局变量

全局变量指在所有函数外部声明的变量,可在当前文档中的所有脚本中使用。局部变量则是在函数内部声明的变量,只能在函数内部使用。函数参数也是一种局部变量。

如果一个局部变量和全局变量同名,则函数内部的局部变量将屏蔽全局变量。

给未声明的变量赋值时,JavaScript默认将其声明为全局变量。即使变量在函数内部使用,只要没有使用var声明,JavaScript也会将其声明为全局变量。

【例2-4】 使用全局变量和局部变量。源文件:02\test2-4.html。

…
<body>
    <script>
        var a, b;                               //声明两个全局变量
        a = 1
        b = 2
        function test() {
            var a                               //声明同名局部变量a
            document.write("在函数中输出各个变量值:")
            document.write("<br>a = " + a)      //输出局部变量a,此时a还未赋值
            document.write("<br>b = " + b)      //输出全局变量b
            a = 100                             //为局部变量a赋值
            b = 200                             //为全局变量b赋值
            c = 300                             //为声明的变量赋值,c为全局变量
        }
        test()                                  //调用函数
        document.write("<p>调用函数后输出各个变量值:")
        document.write("<br>a = " + a)          //输出全局变量a
        document.write("<br>b = " + b)          //输出全局变量b
        document.write("<br>c = " + c)          //输出全局变量c
    </script>
</body>
</html>

浏览器中的输出结果如图2-6所示。

图2-6 使用全局变量和局部变量

修改test2-4.html,在函数中添加一条局部变量声明语句,然后在调用函数后尝试使用该变量。代码如下。

…
<body>
    <script>
        var a, b;                              //声明两个全局变量
        a = 1
        b = 2
        function test() {
            var a                               //声明同名局部变量a
            document.write("在函数中输出各个变量值:")
            document.write("<br>a = " + a)      //输出局部变量a,此时a还未赋值
            document.write("<br>b = " + b)      //输出全局变量b
            a = 100                             //为局部变量a赋值
            b = 200                             //为全局变量b赋值
            c = 300                             //为声明的变量赋值,c为全局变量
            var d=400                           //声明局部变量d
        }
        test()                                  //调用函数
        document.write("<p>调用函数后输出各个变量值:")
        document.write("<br>d = " + d)          //试图使用局部变量d,出错
        document.write("<br>a = " + a)          //输出全局变量a
        document.write("<br>b = " + b)          //输出全局变量b
        document.write("<br>c = " + c)          //输出全局变量c
    </script>
</body>
</html>

浏览器通常会在脚本出错时停止执行脚本,同时停止加载后继HTML代码。可在打开开发人员工具后,刷新页面,在控制台窗口中查看脚本错误信息,如图2-7所示。

图2-7 在控制台窗口中查看脚本错误信息

错误信息显示脚本运行到“document.write("<br>d = " + d)”语句时出错,前面的代码都正确执行了,浏览器显示了已输出内容。这也说明了JavaScript是解释型的,浏览器按照先后顺序依次执行。先执行的语句,其输出结果显示到了浏览器中。

若使用IE浏览器打开test2-4.html,浏览器会打开对话框提示脚本错误,如图2-8所示。

图2-8 IE浏览器提示脚本错误