3.4 数据类型
ECMAScript有5种简单的数据类型,也称为基本数据类型,Undefined、Null、Boolean、Number和String,还有一种复杂数据类型——Object。
3.4.1 typeof操作符
typeof用来检测给定变量的数据类型,对一个值使用typeof操作符可能返回下列某个字符串:
“undefined”——如果这个值未定义
“boolean”——如果这个值是布尔值
“string”——如果这个值是字符串
“number”——如果这个值是数值
“object”——如果这个值是对象或null;
“function”——如果这个值是函数l;
3.4.2 Undefined类型
Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。
例如:
1 var message; 2 alert(typeof message); //undefined 3 alert(message == undefined); //true
另外,对未定义的变量使用typeof,返回值也是undefined
例如: 1 alert(typeof ff); //undefined
3.4.3 Null类型
Null类型也只有一个值,即null,null值表示一个空对象指针,而这也是使用typeof操作符检测null值时会返回"object"的原因,例如:
var car = null; alert(typeof car); //object
如果定义的变量准备在将来用于保存对象,那么最好将变量初始化为null,而不是其他值。这样,只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用了。
if(car != null){ //对car对象执行某些操作 }
3.4.4 Boolean类型
Boolean类型有2个字面值:true和false。
对于任何数据类型调用Boolean()函数,总会返回一个Boolean值。例如:
var message = "some string"; var messageAsBoolean = Boolean(message);
至于返回的值是true还是false,取决于要转换值的数据类型以及实际值,下面给出了各种数据类型及其对应的转换规则:
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | false |
String | 任何非空字符串 | ”“(空字符串) |
Number | 任何非零数字值(包括无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | n/a(not application 不适用) | undefined |
var message = "some string"; if(message){ alert("Value is true"); }
3.4.5 Number类型
var intNum = 55; //十进制55 var octalNum = 070; //八进制56 var octalNum = 079; //无效的八进制,解析为79(字面值中的数值超出了范围,前导零将被忽略) var hexNum1 = 0xA; //十进制10
1. 浮点数值
由于保存浮点数值需要的内存空间是保存整数值的2倍,因此ECMAScript会不失时机地将数值转换为整数值。例如:
var floatNum = 1.; //小数点后面没有数字,解析为1 var floatNum = 10.0; //浮点数值本身表示的就是一个整数,改值会被转换成整数,解析为10
e表示法,即科学计数法
var floatNum = 3.125e7; //31250000 var floatNum = 3e-7; //0.0000003
永远不要测试某个特定的浮点数值,例如:
var a = 0.05; var b = 0.25; if(a + b == 0.3){ //永远不要做这样的测试 alert("true"); }else{ alert("false"); } //输出结果是false
2. 数值范围
由于内存的限制,ECMAScript并不能保存世界上所有的数值,ECMAScript能够表示的最小数值保存在Number.MIN_VALUE中,在大多数浏览器中,这个值是5e-324,能够表示的最大数值保存在Number.MAX_VALUE中,在大多数浏览器中,这个值是1.7976931348623157e+308。如果某次计算的结果的得到了一个超出JavaScript数值范围的值,如果这个值是负数,则会被转换为-Infinity(负无穷),如果这个数值是整数,则会被转换为Infinity(正无穷)。isFinite()函数可以检测一个数值是不是有穷的。