首页 理论教育 4种JavaScript数据类型

4种JavaScript数据类型

时间:2023-10-29 理论教育 版权反馈
【摘要】:图1-10JavaScript的数据类型虽然浮点数值的最高精度是17位小数,但算术运算中可能会不精确。但在ECMAScript中,会返回出特殊的值,因此不会影响程序执行。JavaScript是区分大小写的,True和False或者其他都不是Boolean类型的值。ECMAScript中数组的大小也是可以调整的。

4种JavaScript数据类型

在计算机程序中都是通过值(value)来进行运算的,能够表示并操作值的类型为数据类型。

4.1 基础数据类型

变量包含很多类型,我们可以通过typeof运算符来确认一个变量的数据类型。该运算符是一个一元运算,放在一个运算数之前,运算数可以是任意类型。它的返回值是一个字符串,该字符串说明运算数的类型信息当作字符串返回。使用typeof操作符返回字符串的含义是不同的,Undefined代表未定义,Boolean代表布尔值,String代表字符串,Number代表数值,Object代表对象,Function代表函数。

其中,Number型、String型和Boolean型属于基本类型,在本节中将详细介绍。

4.1.1 Number类型

Number类型包含两种数值型数据:整型浮点型。为了支持各种数值类型,ECMA-262定义了不同格式。最基本的整型数值字面量是十进制整数。八进制数值字面量前导必须是0,八进制序列(0~7)。十六进制字面量前面两位必须是0x,后面是0~9及A~F。

浮点类型是指该数值中必须包含一个小数点,且小数点后面必须至少有一位数字。

对于那些过大或过小的数值,可以用科学技术法来表示(e表示法)。用e表示该数值的前面10的指数次幂。

图1-10 JavaScript的数据类型

虽然浮点数值的最高精度是17位小数,但算术运算中可能会不精确。由于这个因素,做判断的时候一定要考虑到这个问题(如使用整型判断)。

浮点数值的范围在Number.MIN_VALUE至Number.MAX_VALUE之间。

如果超过了浮点数值范围的最大值或最小值,那么就先出现特殊值Infinity(正无穷)或者-Infinity(负无穷)。要想确定一个数值到底是否超过了规定范围,可以使用isFinite ()函数。如果没有超过,返回true,超过了返回false。

另外,还有一个特殊值NaN,即非数值(Not a Number)。这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。比如,在其他语言中,任何数值除以0都会导致错误而终止程序执行。但在ECMAScript中,会返回出特殊的值,因此不会影响程序执行。要想判断这个值到底是不是NaN,可以使用isNaN()函数来判定。

注意:任何与NaN进行运算的结果均为NaN,NaN不与任何值相等,NaN与自身也不相等。

4.1.2 String类型

String类型用于表示字符串。字符串由双引号(")或单引号(')括起来都是允许的,但必须成对出现。

String类型包含了一些特殊的字符字面量,也叫转义字符,如'\n'表示换行, '\t'表示制表,等等。

4.1.3 Boolean类型

Boolean类型表示布尔型数据,有两个取值:true和false。 JavaScript是区分大小写的,True和False或者其他都不是Boolean类型的值。

4.2 复合数据类型

除了基本的数据类型之外,在此我们将简要介绍复合数据类型的基本概念和用法,详细的内容将在以后的章节继续学习

4.2.1 Object类型

ECMAScript中的对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。

Object ()是对象构造,如果对象初始化时不需要传递参数,可以不用写括号,但这种方式我们是不推荐的。Object ()里可以任意传参,可以传数值、字符串、布尔值等,而且还可以进行相应的计算。既然可以使用new Object ()来表示一个对象,那么我们也可以使用这种new操作符来创建其他类型的对象。

4.2.2 Array类型

Array(数组)类型是最常用的类型,下标是从0开始的。但是ECMAScript中的Array类型和其他语言中的数组有着很大的区别。虽然数组都是有序排列,但这里的数组中的每个元素可以保存任何类型。ECMAScript中数组的大小也是可以调整的。

(www.xing528.com)

4.3 特殊数据类型

4.3.1 Undefined类型

前面已经提过,undefined类型只有一个值,即特殊的undefined,表示变量已声明但没有对其初始化。注意:我们没有必要显式地给一个变量赋值为undefined,因为没有赋值的变量会隐式地赋值为undefined,而undefined主要的目的是正式区分空对象与未经初始化的变量。未初始化的变量与根本不存在的变量(未声明的变量)也是不一样的。

4.3.2 Null型

Null类型也是一个只有一个值的数据类型,即特殊的值null。它表示一个空对象引用,但请特别注意typeof操作符检测null会返回object。

如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null。这样,当检查null值时就会知道变量是否已经分配了对象引用。

有个要特别说明的是,undefined是派生自null的,因此ECMA-262规定对它们的相等性测试返回true。

由于undefined和null两个值的比较是相等的,所以,未初始化的变量和赋值为null的变量会相等。这时可以采用typeof变量的类型进行比较,但建议还是要注意编码的规范,不要忘记初始化变量。

4.4 数据类型转换

如前面所提,JavaScript是一种松散类型的语言,因此定义变量时不需要订制变量的数据类型。但是为了增强代码的可读性,我们需要学习如何显式转换数据类型。

4.4.1 转换成字符串

toString ()方法可以把值转换成字符串。toString ()方法一般是不需要传参的,但在数值转成字符串的时候,可以传递进制参数。

4.4.2 转换成数字

有3个函数可以把非数值转换为数值,分别是Number ( ) 、 parseInt ()和parseFloat ( ) 。 Number ()函数是转型函数,可以用于任何数据类型,而另外两个则专门用于把字符串转成数值。

如果是字符串,应该遵循以下规则:只包含数值的字符串,会直接转成十进制数值,如果包含前导0,即自动去掉;只包含浮点数值的字符串,会直接转成浮点数值,如果包含前导和后导0,即自动去掉;如果字符串是空,那么直接转成0;如果不是以上三种字符串类型,则返回NaN。

由于Number()函数在转换字符串时比较复杂且不够合理,因此,在处理整数的时候更常用的是parseInt()函数。

parseInt( )除了能够识别十进制数值,也可以识别八进制和十六进制数值。

ECMAScript为parseInt( )提供了第二个参数,用于解决各种进制的转换。

parseFloat ()是用于浮点数值转换的,和parseInt()一样,从第一位解析到非浮点数值位置。

4.4.3 基本数据类型转换

虽然Boolean类型的字面量只有true和false两种,但ECMAScript中所有类型的值都有与这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以使用转型函数Boolean( ) 。

上面是一种显式转换,属于强制性转换。而实际应用中,还有一种隐式转换。比如,在if条件语句里面的条件判断,就存在隐式转换。表1-10是其他类型转换成Boolean类型规则。

表1-10 其他类型转换成Boolean类型规则

在转型之前不知道变量是否是null或者undefined的情况下,我们还可以使用转型函数String( ),这个函数能够将任何类型的值转换为字符串。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈