犀牛书第3章 JavaScript数据类型和值(上篇)

来源:互联网 发布:做生日贺卡的软件 编辑:程序博客网 时间:2024/05/21 06:25

JavaScript支持5种基本数据类型

number数字类型string字符串booleantrue/falsenull
undefined未定义

除了这些基本数据类型,JavaScript还支持复合数据类型---对象。一个对象表示的是值的集合。JavaScript中的对象有两种:一种表示的是已命名的值的无序集合(一般对象),另一种表示的是有编号的值的有序集合(数组)。虽然在本质上来说,JavaScript中的对象和数组是同一种数据类型,但是它们的行为却极为不同,所以通常将它们看成两种不同的类型。

JavaScript还定义了另一种特殊的对象---函数。函数是具有可执行代码的对象,可以通过调用函数执行某些操作。和数组一样,函数的行为与其他类型的对象不同,JavaScript为函数定义了专用的语法。因此我们将函数看作独立于对象和数组的数据类型。

除了函数和数组外,核心JavaScript语言还定义了其他一些专用的对象。这些对象表示的不是新的数据类型,而是对象的新的类。Date类定义的是表示日期的对象,RegExp类定义的是表示正则表达式的对象......等等。

1. 数字

数字是最基本的数据类型,它们几乎无需解释。JavaScript和其他程序设计语言(如C和Java)的不同之处在于它并不区别整型数值和浮点型数值。在JavaScript中,所有的数字都是由浮点型表示的。当一个数字直接出现在JavaScript程序中,我们称它为数值直接量。JavaScript使用语言自身提供的算术运算符来进行数字运算,不仅如此,它还采用了大量的算术函数,来支持更为复杂的算术运算,这些函数是语言核心的一部分。为了方便,这些函数都被保存为Math对象的属性,因此我们总是使用直接量名Math来访问这些函数。

JavaScript还使用了一些特殊的数值。当一个浮点值大于所能表示的最大值时,其结果是一个特殊的无穷大值,JavaScript将它输出为Infinity。同样地,当一个负值比所能表示的最小的负值还小时,结果就是负无穷大,输出为-Infinity

当一个算术运算(如用0来除0)产生了未定义的结果或错误时,就会返回另一个特殊的JavaScript数值,在这种情况下,结果是一个非数字的特殊值,输出为NaN。这个非数字值的行为有些不寻常,因为它和任何数值都不相等,包括它自己在内,所以需要一个专门的函数isNaN( )来检测这个值。相关的函数isFinite( )用来检测一个数字是否是NaN,正无穷大或负无穷大。

特殊数值的常量常量含义Infinity无穷大NaN非数字Number.MAX_VALUE可表示的最大数字Number.MIN_VALUE可表示的最小数字Number.NaN非数字Number.POSITIVE_INFINITY正无穷大Number.NEGATIVE_INFINITY负无穷大

2. 字符串

字符串是用来表示文本的数据类型,程序中的字符串直接量是包含在单引号或双引号中的。注意JavaScript中没有char这样的字符数据类型。

字符串直接量

字符串直接量必须写在一行中,如果将它们放在两行,可能会将它们截断。如果必须在字符串直接量中添加一个换行符,可以使用字符序列\n。如“this string \nhas two lines”。注意当使用单引号来界定字符串时,必须留意英文的缩写和所有格,如can't和O'reilly's。由于撇号和单引号相同,所以必须使用反斜线符号(\)来转义带有单引号的字符串中出现的撇号。

字符串直接量中的转义序列

在JavaScript的字符串中,反斜线(\)具有特殊的用途。在反斜线后加一个字符就可以表示字符串中无法出现的字符了。例如\n是一个转义序列,它表示的是一个换行符。

JavaScript的转义序列序列所代表的字符\0NULL\b退格符\t水平制表符\n换行符\v垂直制表符\f换页符\r回车符\"双引号\'单引号或撇号\\反斜线符\xXX由两位16进制数值XX指定的Latin-1字符\uXXXX由四位16进制数XXXX指定的Unicode字符\XXXECMAScript v3不支持,不要使用这种转义序列字符串的使用

JavaScript的内部特性之一就是能够连接字符串。如果将加号(+)运算符用于数字,那么它将把两个数字相加。但是如果将它作用于字符串,它就会把这两个字符串连接起来,将第二个字符串附加在第一个之后。要确定一个字符串的长度(它所包含的字符数),可以使用字符串的length属性。如果要获得字符串s的最后一个字符:

last_char=s.charAt(s.length-1);
在字符串s中查找第一个字母“a”的位置:

i=s.indexOf('a');
操作字符串的方法还有很多,这里不一一赘述。

把数字转换为字符串

将数字转换为字符串常用的方法有三种:

①要把一个数字转换为一个字符串,只要给它添加一个空的字符串即可:

var n_as_string=n+" ";

②要让数字更加显式地转换为字符串,可以使用String( )函数:

var string_value=String(number);

③使用toString( )方法:

var string_value=number.toString( );
Number对象的toString( )方法有一个可选的参数,该参数用来指定转换的基数。如果不指定这个参数,默认会以10为基数进行转换。

 var n=17;binary_string=n.toString(2);  //"10001"octal_string="0"+n.toString(8);  //"021"hex_string="0x"+n.toString(16);  //"0x11"
JavaScript 1.5以前的版本的一个缺点就是:没有内建的方法来把一个数字转换为字符串并且指定其中所包含的小数点的位置,或者指定是否应该使用指数表示法。这使得很难显示一些传统格式的数字,如表示货币值的数字。

ECMAScript v3和JavaScript 1.5通过为Number类增加了3个新的方法解决了这一问题。

①toFixed( )方法把一个数字转换为字符串,并且显示小数点后的指定的位数,它不使用指数表示法。

var n=123456.789;n.toFixed(0);  //"123457"n.toFixed(2);  //"123456.79"

②toExponential( )使用指数表示法把一个数字转换为字符串,小数点前面为1位数,后年有指定的位数:

var n=123456.789;n.toExponential(1);  //"1.2e+5"n.toExponential(3);  //"1.235e+5"

③toPrecision( )使用指定的有意义的位数(有效数字)来显示一个数字,如果有效数字的位数还不够显示数字的整个整数部分,它就使用指数表示法。

var n=123456.789;n.toPrecision(4);  //"1.235e+5"n.toPrecision(7);  //"123456.8"
把字符串转换为数字

把字符串转换为数字常用的方法有三种:

①当一个字符串用于数字环境中,它会自动地转换为一个数字。所以只要把一个字符串减去0就可以将其转换为一个数字。

var number=string_value-0;

②调用Number( )构造函数

var number=Number(string_value);

③调用parseInt( )或parseFloat( )

parseInt("3 blind mice");  //3parseFloat("3.14 meters");  //3.14

3. 布尔值

布尔数据类型只有两个值true和false。在JavaScript中,布尔值很容易转换,从其他类型转换为布尔值也较容易,而且往往是自动转换的。

如果一个布尔值用在数值环境中,true就转换为数字1,而false就转换为数字0。

如果一个布尔值用在一个字符串环境中,true就转换为字符串"true",而false就转换为字符串"flase"。

如果一个数字用在一个本该布尔值的地方,那么如果这个数字是0或NaN,它就会转换为false,否则就转换为true。

如果字符串用在本该用布尔值的地方,那么空串会被转换为false,否则就转换为true。

null或undefined也会转换为false,而任何的非空对象、数组或函数都转换为true。

如果读者喜欢让类型转换成为显式的,可以使用Boolean( )函数:var x_as_boolean=Boolean(x);

4. null

null表示“无值”。如果一个变量的值为null,那么就说明它的值不是有效的对象、数组、数字、字符串和布尔值。

①当null用于布尔环境,它转换为false。

②当null用于数字环境,它转换为0。

③当null用于一个字符串环境,它转换为“null”。

5. undefined

在使用了一个并未声明的变量时,或者使用了已经声明但还没有赋值的变量时,又或者使用了一个并不存在的对象属性时,返回的就是undefined。

①当undefined用于布尔环境,它会转换为false。

②当undefined用于数字环境,它会转换为NaN。

③当undefined用于字符串环境时,它会转换为"undefined"。





原创粉丝点击