ECMAScript中主要有五种简单数据类型和一种复杂数据类型。
五种简单数据类型包括:null,undefined,Number,String,Boolean。
另外一种复杂数据类型为:Object(无序键值对的集合)
使用“typeof”操作符可以检测数据类型.
下面分别来分析一下各种数据类型的特性和使用方法
1.undefind
使用var声明一个变量但是未对其进行初始化,那么变量的值就是undefined。
var message;
alert(message == undefined); //true
alert(message); //undefined
alert(age); //报错 因为未声明
alert(typeof message); //undefined
alert(typeof age); //undefined
这里有一个未声明的变量,在使用它时,会报错,因为编译器找不到这个变量。
但是使用typeof检测类型时,返回的也是undefined。虽然有些牵强,但是javascript只有六种数据类型,看起来貌似只能是null或undefined符合,但为什么是undefined而不是null呢,我们来看一下null是个什么样的数据类型。
2.null
空对象指针
var car = null;
alert(typeof car); //Object
《javascript高级程序设计》书中写道:如果定义的变量准备将来用语保存对象,那么最好将该变量初始化为null而不是其它值。
实际上,undefined是派生于null的。
alert(null == undefined); //true
3.Boolean
布尔值有两个,true和false。尽管有时候我们在程序中会用1来代替true,用0来代替false,但是他们之间是不能划等号的。
下表是各种数据类型在不同状态下对应的布尔值。
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | false |
String | 任何非空字符串 | 空字符串 |
Number | 任何非零数字值(包括Infinity) | 0和NAN |
Object | anyone | null |
undefined | undefined |
4.Number
number包括整数和浮点数值(双精度),也就是小数。浮点数的占用空间是整数的两倍。
浮点数的最高精度为17,所以进行计算时精度会受影响。
比如:0.1+0.2 = 0.30000000000000004;
数字开头为0,是8进制数字。开头为0x,是16进制数字。在进行数值计算时,八进制和十六进制的数字都会被转换成十进制。
数值范围:-Infinity < Number.MIN_VALUE < 0 < Number.MAX_VALUE < Infinity。
数值转换
Number():可用于任何数据类型
Number(null) = 0; Number(undefined) = NAN; Number(true) = 1; Number(011) = 11; Number(0xA) = 10;
如果是对象,就会调用valueof()方法,依照上面的原则转换,如果结果为NAN,那么调用toString()方法,再依照上面的原则转换。
parseInt():转换字符串
忽略掉字符串开头的空格字符,如果第一个非空字符是数字或者负号,那么继续向下转换,直到遇到下一个非数字字符,输出结果。
如果空格之后第一个字符不是数字或者负号,那么输出NAN。
parseInt()方法提供两个参数,第一个是待转换字符串,第二个是目标进制。
parseInt("11",2) = 3; parseInt("10",10) = 10; parseInt("11",8) = 9;
大部分情况下,第二个参数都使用10。
parseFloat():转换字符串
解析原则和parseInt相同,主要用来解析浮点数。
parseFloat("022.3") = 22.3; parseFloat("22.3.4") = 22.3;
5.String
由0或多个16位Unicode字符组成的字符序列,也就是我们说的字符串。
将一个数值转换成字符串有两种方式。
第一个是toString()方法,除了null和undefined之外,其他数据类型都有这个方法。
var num = 11;num.toString() = "11";
var boo = true;boo.toString() = "true";
toString()方法括号内还可以设置参数,在转换数值的时候起作用
var num = 10;
alert(num.toString(2)); // "1010"
alert(num.toString(16)); //a