ECMAScript中——
5种简单数据类型(也成为基本数据类型):String、Number、Boolean、Undefined、Null。
1种复杂数据类型:Object(本质上由一组无序的名值对组成)。
String类型
用于表示由零或多个16位Unicode字符组成的字符序列,即字符串;
可以由双引号或单引号表示(必须配对使用);
ECMAScript中的字符串是不可变的,要改变某个变量保存的字符串,首先要销毁原来的字符串,然后用新值替代;
转换为字符串——
1. 使用toString(),返回相应值的字符串表现;(null和undefined值没有toString方法)
多数情况下,调用toString()方法不必传递参数,但是在调用数值的toString()时,可以传递一个参数:输出数值的基数。默认情况下,以十进制格式返回数值的字符串表示,通过传递基数,可以输出以二进制、八进制、十六进制表示的字符串值;
2. 使用转型函数String(),该函数能够将任何类型的值转换为字符串;
如果值有toString(),则调用该方法并返回相应结果;
如果值是null, 则返回"null";
如果值是undefined,则返回"undefined";
Number类型
该类型使用IEEE754格式来表示整数和浮点数值;
整数——
支持十进制,八进制,十六进制;
注:八进制字面值的第一位必须是零(0),然后八进制数字序列(0~7),如果字面值中的数值超出了范围,那么前导零将被忽略,后面的数值将被当做十进制数值解析;(八进制字面量在严格模式下是无效的,会导致支持的JavaScript引擎抛出错误)
十六进制字面值的前两位必须是0x,后跟任何十六进制数字(0~9 及 A~F),其中,字母A~F可以大写,也可以小写;
在进行算术运算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制数值;
浮点数——
所谓浮点数,就是该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。
虽然小数点前面可以没有整数,但不推荐这种写法。
由于保存浮点数值需要的内存空间是保存整数值的两倍,因此ECMAScript会不失时机地将浮点数值转换为整数值。
对于极大或极小的数值,可以用e表示法(即科学计数法);
用e表示法表示的数值等于e前面的数值乘以10的指数次幂。
即前面是一个数值(整数或浮点数),中间是一个大写或小写的字母E,后面是10的幂中的指数,该幂值将用来与前面的数相乘;
var num = 3.125e7; // 等于31250000
var num = -0.000007; // 等于7-e6
默认情况下,ECMAScript会将那些小数点后面带有6个零以上的浮点数值转换为e表示的数值;
浮点数值的最高经度是17位小数,但在进行算术计算时其精确度远远不如整数。
数值范围——
由于内存的限制,ECMAScript并不能保存世界上所有的数值。
最小值:Number.MIN_VALUE(5e-324)
最大值:Nuber.MAX_VALUE(1.7976931348623157e+308)
如果计算解锁超出了JavaScript数值范围的值,那么该数值将自动转换成特殊的Infinity值,负数则为-Infinity;
Infinity不能够参与运算;
要想确定一个数值是不是有穷的,可以使用isFinite(),形参位于最小与最大数值之间时会返回true;
NaN——
非数值(Not a Number),用于标识一个本来要返回数值的操作数未返回数值的情况。
例:任何数值除以0都会导致错误,在ECMAScript中返回NaN;
任何涉及NaN的操作都会返回NaN;
NaN与任何值都不相等,包括NaN本身;
检索NaN使用isNaN(),接收一个值后,会尝试将其转换为数值,任何不能被转换为数值的值都会返回true;
数值转换——
有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat();
parseInt()和parseFloat()专门用于把字符串转换为数值;
Number()可以用于任何数据类型;
Number函数转换规则——
1. Boolean值,true和false将分别被转换为1和0;
2. 数值型,只是简单的传入和返回;
3. null值,返回0;
4. undefined,返回NaN;
5. 字符串,包含纯数字返回数字(统一转换为十进制),空字符串返回0,其他格式,转换为NaN;
6. 对象,调用对象的valueOf(),然后依照前面的规则转换返回的值;
Boolean类型
该类型只有两个字面值:true和false;
注:要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean();
除了false, "", 0, undefined, null, NaN为false,其余都为true;
Undefined类型
在使用var声明变量但未对其进行初始化时,该变量的值就是undefined;
Null类型
null值表示一个空对象指针,所以使用typeof操作符检测null值时会返回"object";
注:如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值;
这样一来,只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用;
实际上,undefined值是派生自null值得,因此 null == undefined 为true;
Object类型
对象是一组数据和功能的集合。
对象可以通过执行new操作符后跟要创建的对象类型的名称来创建;
而创建Object类型的实例并为其添加属性和(或)方法,就可以创建自定义对象;
Object类型所具有的任何属性和方法也同样存在于更具体的对象中;
Object的每个实例都具有下列属性和方法——
constructor:保存着用于创建当前对象的函数;
hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中作为参数的属性名(propertyName)必须以字符串形式指定;
isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型;
propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。(参数类型必须是字符串)
toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应;
toString():返回对象的字符串表示;
valueOf():返回对象的字符串、数值或布尔值表示;
如何判断类型?
使用typeof操作符,对一个值使用typeof操作符可能返回以下某个字符串;
"string"——如果该值是字符串;
"number"——如果该值是数值;
"boolean"——如果该值是布尔值;
"undefined"——如果该值未定义;
"function"——如果该值是函数;
"object"——如果这个值是对象或null;
注:typeof null 会返回 "object",因为特殊值null被认为是一个空的对象引用;