犀牛书第3章 JavaScript数据类型和值(上篇)
2013-05-30 03:34
253 查看
JavaScript支持5种基本数据类型:
除了这些基本数据类型,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,正无穷大或负无穷大。
特殊数值的常量
2. 字符串:
字符串是用来表示文本的数据类型,程序中的字符串直接量是包含在单引号或双引号中的。注意JavaScript中没有char这样的字符数据类型。
字符串直接量:
字符串直接量必须写在一行中,如果将它们放在两行,可能会将它们截断。如果必须在字符串直接量中添加一个换行符,可以使用字符序列\n。如“this string \nhas two lines”。注意当使用单引号来界定字符串时,必须留意英文的缩写和所有格,如can't和O'reilly's。由于撇号和单引号相同,所以必须使用反斜线符号(\)来转义带有单引号的字符串中出现的撇号。
字符串直接量中的转义序列:
在JavaScript的字符串中,反斜线(\)具有特殊的用途。在反斜线后加一个字符就可以表示字符串中无法出现的字符了。例如\n是一个转义序列,它表示的是一个换行符。
JavaScript的转义序列
字符串的使用:
JavaScript的内部特性之一就是能够连接字符串。如果将加号(+)运算符用于数字,那么它将把两个数字相加。但是如果将它作用于字符串,它就会把这两个字符串连接起来,将第二个字符串附加在第一个之后。要确定一个字符串的长度(它所包含的字符数),可以使用字符串的length属性。如果要获得字符串s的最后一个字符:
把数字转换为字符串:
将数字转换为字符串常用的方法有三种:
①要把一个数字转换为一个字符串,只要给它添加一个空的字符串即可:
②要让数字更加显式地转换为字符串,可以使用String( )函数:
③使用toString( )方法:
ECMAScript v3和JavaScript 1.5通过为Number类增加了3个新的方法解决了这一问题。
①toFixed( )方法把一个数字转换为字符串,并且显示小数点后的指定的位数,它不使用指数表示法。
②toExponential( )使用指数表示法把一个数字转换为字符串,小数点前面为1位数,后年有指定的位数:
③toPrecision( )使用指定的有意义的位数(有效数字)来显示一个数字,如果有效数字的位数还不够显示数字的整个整数部分,它就使用指数表示法。
把字符串转换为数字常用的方法有三种:
①当一个字符串用于数字环境中,它会自动地转换为一个数字。所以只要把一个字符串减去0就可以将其转换为一个数字。
②调用Number( )构造函数
③调用parseInt( )或parseFloat( )
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"。
number | 数字类型 |
string | 字符串 |
boolean | true/false |
null | 空 |
undefined | 未定义 |
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 | 负无穷大 |
字符串是用来表示文本的数据类型,程序中的字符串直接量是包含在单引号或双引号中的。注意JavaScript中没有char这样的字符数据类型。
字符串直接量:
字符串直接量必须写在一行中,如果将它们放在两行,可能会将它们截断。如果必须在字符串直接量中添加一个换行符,可以使用字符序列\n。如“this string \nhas two lines”。注意当使用单引号来界定字符串时,必须留意英文的缩写和所有格,如can't和O'reilly's。由于撇号和单引号相同,所以必须使用反斜线符号(\)来转义带有单引号的字符串中出现的撇号。
字符串直接量中的转义序列:
在JavaScript的字符串中,反斜线(\)具有特殊的用途。在反斜线后加一个字符就可以表示字符串中无法出现的字符了。例如\n是一个转义序列,它表示的是一个换行符。
序列 | 所代表的字符 |
\0 | NULL |
\b | 退格符 |
\t | 水平制表符 |
\n | 换行符 |
\v | 垂直制表符 |
\f | 换页符 |
\r | 回车符 |
\" | 双引号 |
\' | 单引号或撇号 |
\\ | 反斜线符 |
\xXX | 由两位16进制数值XX指定的Latin-1字符 |
\uXXXX | 由四位16进制数XXXX指定的Unicode字符 |
\XXX | ECMAScript 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"); //3 parseFloat("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"。
相关文章推荐
- 犀牛书第3章 数据类型和值(中篇)
- Javascript高级程序设计第3章回顾总结部分--数据类型
- javascript开发技术大全-第3章 js数据类型
- 犀牛书第3章 数据类型和值(下篇):传值与传址
- 第三章 JavaScript 数据类型和值
- javascript 数据类型和值(基础版)
- JavaScript 数据类型和值
- javascript开发技术大全-第3章 js数据类型
- (4)JavaScript学习笔记 - 数据类型和值(续)
- (4)JavaScript学习笔记 - 数据类型和值(续)
- 细说JavaScript数据类型
- JavaScript数据类型(一)——typeof操作符、Boolean、Null和Undefined
- JavaScript中基本数据类型和引用数据类型的区别
- JavaScript判断变量数据类型
- (数据类型和值概述)JavaScript权威指南笔记3
- javaScript判断数据类型以及typeof和intanceof的差别
- JavaScript第三课——数据类型(typeof操作符、Undefined类型、Null类型、Boolean类型)
- 4-JavaScript数据类型与类型转化
- 【JS】——JavaScript数据类型基础
- JavaScript数据类型检测的四种方式