JavaScript之数据类型

JaveScript数据类型


JavaScript的数据类型包括:

(1)5种简单数据类型(基本数据类型):Undefined、Null、Boolean、Number、String

(2)1种复杂数据类型:Object


Undefined类型

Undefined类型只有一个字面值,即undefined。

在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined

对于未声明的变量,只能执行一项操作,即使用typeof操作符检测其数据类型,返回结果为“undefined”


Null类型

Null类型只有一个字面值,即null。

使用typeof操作符,typeof(null)的结果为“object”。我们可以这样理解:null表示一个空对象指针

undefined值是派生自null值的,因此相等操作符(==)的结果为“true”

JavaScript之数据类型


null和undefined的区别:

两者在用途上是完全不同的:无论在什么情况下,都没有必要把一个变量的值显式地设置为undefined,可是同样的规则对null却不适用。换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。这样做不仅可体现null作为空对象指针的惯例,而且也有助于进一步区分null和undefined


Boolean类型 

Boolean类型有两个字面值:true和false

虽然Boolean类型的字面值只有两个,但是JS中所有类型的值都有与这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()

各种数据类型及其对应的转换规则:

JavaScript之数据类型


Number类型

Number类型可以表示整数和浮点数值

整数数值:

十进制整数:var intNum = 55;

八进制整数:var octalNum = 070;  //第一位必须为零(0)

十六进制整数:var hexNum = 0xA; //前两位必须为0x


在JS中可以保存正零(+0)和负零(-0),正零和负零被认为相等


浮点数值:

浮点数值:就是数值中必须包含一个小数点 ,并且小数点后面必须至少有一位数字(小数点前的数据是可有可无的,但是最好有)

对于极大或极小的数值,可以用e表示法(即科学计数法)表示的浮点数值表示。

用e表示法表示的数值等于e前面的数值乘以10的指数次幂

浮点数值的最高精度是17位小数,但在进行算术计算时其精确度远远不如整数。所以会出现下面的情况:

JavaScript之数据类型

这是因为0.1+0.2的结果实际为0.30000000000000004。但我们可以将0.1+0.2的计算结果和0.3之间的误差小于某个阈值时,则认为true。

JavaScript之数据类型


数值范围:

JS能表示的最小数值保存在Number.MIN_VALUE中,这个值为5e-324

JS能表示的最大数值保存在Number.MAX_VALUE中,这个值为1.7976931348623157e+308

如果某次计算的结果得到了一个超出JS数值范围的值,那么这个数值将被自动转换成特殊的Infinity值,具体来说,如果这个数值是负数,则会被转换成-Infinity(负无穷),如果这歌数值是正数,则会被转换成Infinity(正无穷)

访问Number.NEGATIVE_INFINITY和Number.POSITIVE_INFINITY可以得到-Infinity和Infinity。

判断一个数值是不是有穷的,可以使用isFinite()函数。


NaN

NaN,即非数值(Not a Number),这个数值用于表示一个本来要返回数值的操作数未返回数值的情况:例如,任何数值除以0会返回NaN。

两个特点:

(1)任何涉及NaN的操作(如NaN/10)都会返回NaN,这个特点在多步计算中有可能导致问题

(2)NaN与任何值都不相等,包括NaN本身。所以可以使用isNaN()函数,来判断某个变量是否“不是数值”。这个函数接受的参数可以为任何类型,isNaN函数会尝试将这个参数转换为数值,然后判断是否“不是数值”。

JavaScript之数据类型


数值转换

有三个函数可以把非数值转换为数值:Number()    parseInt()    parseFloat()

Number():可以用于任何数值类型

JavaScript之数据类型


parseInt()和parseFloat()专门用于把字符串转换成数值

parseInt()在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN;也就是说,用parseInt()转换空字符串会返回NaN。如果第一个字符是数字字符,perseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。

JavaScript之数据类型

注意:在这里,小数点“ . ”也是非数字字符。

如果字符串中的第一个字符是数字字符,parseInt()也能够识别出各种整数格式(十进制、八进制和十六进制),然后返回其对应的十进制数值。

parseInt()函数也可以指定被转换的字符串的基数。如果知道要解析的值是十六进制格式的字符串,那么指定基数16作为第二个参数。


parseFloat()函数也是从第一个字符开始解析每个字符。并且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。

parseFloat()和parseInt()的区别:

(1)parseFloat()转换中,字符串中的第一个小数点是有效的,而第二个小数点是无效的了,因此它后面的字符串将被忽略

(2)parseFloat()始终都会忽略前导的零。对于十六进制格式的字符串,parseFloat()会将其转换为0。由于parseFloat()只解析十进制值,因此没有用第二个参数指定基数的用法。


String类型

String类型的值,由双引号(“)或单引号(‘)表示。

任何字符串的长度都可以通过访问其length属性取得。

JS中,字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。


字符字面量

String数据类型包含一些特殊的字符字面量,也叫转义序列

JavaScript之数据类型


转换为字符串

两种方法:

(1)调用toString()方法,返回相应值的字符串表示。数值、布尔值、对象和字符串值都有toString()方法,但是null和undefined值没有这个方法

对于数值调用toString()方法时,可以传递一个参数,即输出数值的基数,即可以输出以二进制、八进制和十六进制,乃至其他任意有效进制格式表示的字符串值。

(2)使用转型函数String(),能够将任何类型的数值转换为字符串,其中包括要转换的值为null和undefined的情况。

String()函数的转换规则:

JavaScript之数据类型


Object类型

JS中对象就是一组数据和功能的集合。对象可以通过执行new操作符,后面跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性和(或)方法,就可以创建自定义对象。

var o = new Object();

var o = new Object;  //这两种表示方法都是合法的

Object类型是所有它的实例的基础,Object类所具有的任何属性和方法也同样存在于更具体的对象中。(在java中,我们把java.lang.Object看做所有类的父类,那么在JS中的Object类型也可以这样理解,只是没有继承的概念)

JavaScript之数据类型


typeof操作符

typeof操作符:检测给定变量的数据类型

使用方法:

(1)typeof  vName

(2)typeof(vName)

typeof是一种操作符,所以括号是可有可无的,该操作下,返回的是一个字符串,值为:“Undefined”  "boolean"  "string"  "number"  "object"  "function"

JavaScript之数据类型