JavaScript从入门到精通(微视频精编版)
上QQ阅读APP看书,第一时间看更新

2.1 数据类型

视频讲解

JavaScript的数据类型分为基本数据类型和复合数据类型。关于复合数据类型中的对象、数组和函数等,将在后面的章节进行介绍。在本节中,将详细介绍JavaScript的基本数据类型。JavaScript的基本数据类型有数值型、字符串型、布尔型以及两个特殊的数据类型。

2.1.1 数值型

数值型(number)是JavaScript中最基本的数据类型。JavaScript和其他程序设计语言(如C语言和Java)的不同之处在于,它并不区别整型数值和浮点型数值。在JavaScript中,所有的数值都是由浮点型表示的。JavaScript采用IEEE754标准定义的64位浮点格式表示数字,这意味着它能表示的最大值是1.7976931348623157e+308,最小值是5e-324。

当一个数字直接出现在JavaScript程序中时,我们称它为数值直接量(numeric literal)。JavaScript支持数值直接量的形式有几种,下面将对这几种形式进行详细介绍。

注意

在任何数值直接量前加负号(-)可以构成它的负数。但是负号是一元求反运算符,它不是数值直接量语法的一部分。

1.十进制

在JavaScript程序中,十进制的整数是一个由0~9组成的数字序列。例如:

    0
    6
    -2
    100

JavaScript的数字格式允许精确地表示-900719925474092(-253)和900719925474092(253)之间的所有整数(包括-900719925474092(-253)和900719925474092(253))。但是使用超过这个范围的整数,就会失去尾数的精确性。需要注意的是,JavaScript中的某些整数运算是对32位的整数执行的,它们的范围从-2147483648(-231)到2147483647(231-1)。

2.八进制

尽管ECMAScript标准不支持八进制数据,但是JavaScript的某些实现却允许采用八进制(以8为基数)格式的整型数据。八进制数据以数字0开头,其后跟随一个数字序列,这个序列中的每个数字都在0和7之间(包括0和7),例如:

    07
    0366

由于某些JavaScript实现支持八进制数据,而有些则不支持,所以最好不要使用以0开头的整型数据,因为不知道某个JavaScript的实现是将其解释为十进制,还是解释为八进制。

3.十六进制

JavaScript不但能够处理十进制的整型数据,还能识别十六进制(以16为基数)的数据。所谓十六进制数据,是以“0X”或“0x”开头,其后跟随十六进制的数字序列。十六进制的数字可以是0到9中的某个数字,也可以是a(A)到f(F)中的某个字母,它们用来表示0到15之间(包括0和15)的某个值,下面是十六进制整型数据的例子:

    0xff
    0X123
    0xCAFE911

【例2.01】网页中的颜色RGB代码是以十六进制数字表示的。例如,在颜色代码#6699FF中,十六进制数字66表示红色部分的色值,十六进制数字99表示绿色部分的色值,十六进制数字FF表示蓝色部分的色值。在页面中分别输出RGB颜色#6699FF的3种颜色的色值。代码如下:(实例位置:资源包\源码\02\2.01)

    01  <script type="text/javascript">
    02  document.write("RGB颜色#6699FF的3种颜色的色值分别为:");  //输出字符串
    03  document.write("<p>R:"+0x66);                            //输出红色色值
    04  document.write("<br>G:"+0x99);                           //输出绿色色值
    05  document.write("<br>B:"+0xFF);                           //输出蓝色色值
    06  </script>

执行上面的代码,运行结果如图2.1所示。

图2.1 输出RGB颜色#6699FF的3种颜色的色值

4.浮点型数据

浮点型数据可以具有小数点,它的表示方法有以下两种。

(1)传统记数法

传统记数法是将一个浮点数分为整数部分、小数点和小数部分,如果整数部分为0,可以省略整数部分。例如:

    1.2
    56.9963
    .236

(2)科学记数法

此外,还可以使用科学记数法表示浮点型数据,即实数后跟随字母e或E,后面加上一个带正号或负号的整数指数,其中正号可以省略。例如:

    6e+3
    3.12e11
    1.234E-12

说明

在科学记数法中,e(或E)后面的整数表示10的指数次幂,因此,这种记数法表示的数值等于前面的实数乘以10的指数次幂。

【例2.02】输出“3e+6”“3.5e3”“1.236E-2”这3种不同形式的科学记数法表示的浮点数,代码如下:(实例位置:资源包\源码\02\2.02)

    01  <script type="text/javascript">
    02  document.write("科学记数法表示的浮点数的输出结果:");  //输出字符串
    03  document.write("<p>");                                 //输出段落标记
    04  document.write(3e+6);                                  //输出浮点数
    05  document.write("<br>");                                //输出换行标记
    06  document.write(3.5e3);                                 //输出浮点数
    07  document.write("<br>");                                //输出换行标记
    08  document.write(1.236E-2);                              //输出浮点数
    09  </script>

执行上面的代码,运行结果如图2.2所示。

图2.2 输出科学记数法表示的浮点数

5.特殊值Infinity

在JavaScript中有一个特殊的数值Infinity(无穷大),如果一个数值超出了JavaScript所能表示的最大值的范围,JavaScript就会输出Infinity;如果一个数值超出了JavaScript所能表示的最小值的范围,JavaScript就会输出-Infinity。例如:

    01  document.write(1/0);        //输出1除以0的值
    02  document.write("<br>");     //输出换行标记
    03  document.write(-1/0);       //输出-1除以0的值

运行结果为:

    Infinity
    -Infinity
6.特殊值NaN

JavaScript中还有一个特殊的数值NaN(Not a Number的简写),即“非数字”。在进行数学运算时产生了未知的结果或错误,JavaScript就会返回NaN,它表示该数学运算的结果是一个非数字。例如,用0除以0的输出结果就是NaN,代码如下:

    alert(0/0);  //输出0除以0的值

运行结果为:

    NaN
2.1.2 字符串型

字符串(string)是由0个或多个字符组成的序列,它可以包含大小写字母、数字、标点符号或其他字符,也可以包含汉字。它是JavaScript用来表示文本的数据类型。程序中的字符串型数据是包含在单引号或双引号中的,由单引号定界的字符串中可以含有双引号,由双引号定界的字符串中也可以含有单引号。

说明

空字符串不包含任何字符,也不包含任何空格,用一对引号表示,即""或''。

例如:

(1)单引号括起来的字符串,代码如下:

    '你好JavaScript'
    'mingrisoft@mingrisoft.com'

(2)双引号括起来的字符串,代码如下:

    " "
    "你好JavaScript"

(3)单引号定界的字符串中可以含有双引号,代码如下:

    'abc"efg'
    '你好"JavaScript"'

(4)双引号定界的字符串中可以含有单引号,代码如下:

    "I'm legend"
    "You can call me 'Tom'!"

注意

包含字符串的引号必须匹配,如果字符串前面使用的是双引号,那么在字符串后面也必须使用双引号,反之都使用单引号。

有的时候,字符串中使用的引号会产生匹配混乱的问题。例如:

    "字符串是包含在单引号'或双引号"中的"

对于这种情况,必须使用转义字符。JavaScript中的转义字符是“\”,通过转义字符可以在字符串中添加不可显示的特殊字符,或者防止引号匹配混乱的问题。例如,字符串中的单引号可以使用“\'”来代替,双引号可以使用“\"”来代替。因此,上面一行代码可以写成如下的形式:

    "字符串是包含在单引号\'或双引号\"中的"

JavaScript常用的转义字符如表2.1所示。

表2.1 JavaScript常用的转义字符

例如,在alert语句中使用转义字符“\n”的代码如下:

    alert("网页设计基础:\nHTML\nCSS\nJavaScript");  //输出换行字符串

运行结果如图2.3所示。

图2.3 换行输出字符串

由图2.3可知,转义字符“\n”在警告框中会产生换行,但是在“document.write();”语句中使用转义字符时,只有将其放在格式化文本块中才会起作用,所以脚本必须放在<pre>和</pre>的标签内。

例如,下面是应用转义字符使字符串换行,程序代码如下:

    01  document.write("<pre>");                       //输出<pre>标记
    02  document.write("轻松学习\nJavaScript语言!");  //输出换行字符串
    03  document.write("</pre>");                      //输出</pre>标记

运行结果如图2.4所示。

图2.4 换行输出字符串

如果上述代码不使用<pre>和</pre>的标签,则转义字符不起作用,代码如下:

    document.write("轻松学习\nJavaScript语言!");  //输出字符串

运行结果为:

    轻松学习 JavaScript语言!

【例2.03】在<pre>和</pre>的标签内使用转义字符,分别输出前NBA球星奥尼尔的中文名、英文名以及别名,关键代码如下:(实例位置:资源包\源码\02\2.03)

    01  <script type="text/javascript">
    02  document.write('<pre>');         //输出<pre>标记
    03  document.write('中文名:沙奎尔·奥尼尔');       //输出奥尼尔中文名
    04  document.write('\n英文名:Shaquille O\'Neal');  //输出奥尼尔英文名
    05  document.write('\n别名:大鲨鱼');               //输出奥尼尔别名
    06  document.write('</pre>');                       //输出</pre>标记
    07  </script>

实例运行结果如图2.5所示。

图2.5 输出奥尼尔的中文名、英文名和别名

由上面的实例可以看出,在单引号定义的字符串内出现单引号,必须进行转义才能正确输出。

2.1.3 布尔型

数值数据类型和字符串数据类型的值都无穷多,但是布尔数据类型只有两个值,一个是true(真),一个是false(假),它说明了某个事物是真还是假。

布尔值通常在JavaScript程序中用来作为比较所得的结果。例如:

    n==1

这行代码测试了变量n的值是否和数值1相等。如果相等,比较的结果就是布尔值true,否则结果就是false。

布尔值通常用于JavaScript的控制结构。例如,JavaScript的if/else语句就是在布尔值为true时执行一个动作,而在布尔值为false时执行另一个动作。通常将一个创建布尔值与使用这个比较的语句结合在一起。例如:

    01  if (n==1)   //如果n的值等于1
    02      m=m+1;  //m的值加1
    03  else
    04      n=n+1;  //n的值加1

本段代码检测n是否等于1。如果相等,就给m的值加1,否则给n的值加1。

有时候可以把两个可能的布尔值看作是on(true)和off(false),或者看作是yes(true)和no(false),这样比将它们看作是true和false更为直观。有时候把它们看作是1(true)和0(false)会更加有用(实际上JavaScript确实是这样做的,在必要时会将true转换成1,将false转换成0)。

2.1.4 特殊数据类型
1.未定义值

未定义值就是undefined,表示变量还没有赋值(如“var a;”)。

2.空值(null)

JavaScript中的关键字null是一个特殊的值,它表示为空值,用于定义空的或不存在的引用。这里必须要注意的是,null不等同于空的字符串("")或0。当使用对象进行编程时可能会用到这个值。

由此可见,null与undefined的区别是,null表示一个变量被赋予了一个空值,而undefined则表示该变量尚未被赋值。