JavaScript数据类型
ECMAScript中有5种简单数据类型:Undefined,Null,Boolean,Number和String。还有一种复杂的数据类型Object。ECMAScript不支持任何创建自定义类型的机制。所有值都成为以上6中数据类型之一
一:typeof操作符
typeof操作符是用来检测变量的数据类型的。用法为 typeof(变量/字面量)。
PS:typeof是操作符而不是内置函数
对于值或者变量使用typeof 操作符会返回如下字符串。
字符串 | 描述 |
undefined | 未定义 |
boolean | 布尔类型 |
string | 字符串类型 |
number | 数值类型 |
object | 对象 |
function | 函数 |
二:Undefined类型
在定义变量的时候如果没有对其进行初始化,这个变量的值就是undefined
var box
alert(box) // undefined
未初始化值和变量不存在是不一样的。如:
var box;
alert(age); //报错
alert(typeof(box)) // undefined
alert(typeof(age)) // undefined
三:NULL类型
Null类型表示一个空对象的引用,而typeof操作符检测Null的话返回值为object
var box = null;
alert(typeof(box)) // object
有个需要说明的是undefined 是派生字null的。因此 alert(undefined == null) 的结果会是true
四:Boolean类型
Boolean 类型有两个值:true和false。JavaScript是区分大小写的,True和False或者其他都不是Boolean类型
var box= true;
alert(typeof(box));
虽然Boolean类型的字面量只有true和false两种,但是ECMAScript中所有的类型的值都有与Boolean值等价的值。可以使用转型函数Boolean()
1 var box = “hello world” 2 var box2 = Boolean(box); 3 alert(box2); // true 4 alert(typeof box2); //boolean
上面的例子是一个显示转换,当然我们还可以进行隐式的转换,具体如下:
1 var isChange = "hello" 2 if(isChange) 3 { 4 alert("我是真的"); 5 } 6 else 7 { 8 alert("我是假的"); 9 }
以下是其他类型转换为Boolean类型的规则
数据类型 | 转换为true值 | 转换为false值 |
Boolean | true | false |
String | 任何非空字符串 | 空字符串 |
Number | 非零值包括最大值和最小值 | 0和NaN |
object | 任何对象 | null |
Undefined | undefined |
五:Number类型
Number类型包括整型和浮点型两种,为了支持各种类型的数据。JavaScript定义了不同的整型字面量格式;
十进制整型: var box = 100;
八进制整型: var box = 070; // 八进制 56
var box = 090; // 无效的八进制 自动解析为90
十六进制类型: var box= 0x1a // 16进制 26
浮点类型
浮点类型就是该值中必须包含一个小数点,并且小数点后面必须至少有一位数字。
var box = 3.8 var box1 = .8 都是符合标准的
浮点型数字的空间占用比整型要大两倍,因此ECMAScript会自动将浮点型的数据转换为整型
var box = 12.0 // 转换为12
var box = 12. //小数点之后没有数字,转换为12
对于那些过大或者过小的数据,可以使用科学计数法 e 来表示
var box = 10e2 // 10 X 102
虽然浮点值的最高精度在17位小数,但是算数运算中可能不精确
alert(0.1 + 0.2) // 0.30000000000000004
浮点数的范围在 Number.MIN_VALUE和 Number.MAX_VALUE
alert(Number.MIN_VALUE);
alert(Number.MAX_VALUE);
如果超过了浮点范围的最大值或者最小值,那么就先出现Infinity(正无穷)或者-Infinity(负无穷)
var box= 100e10000 // 超出范围,Infinity
var box = -100e100000 //超出范围,-Infinity
如果想确定一个数值是否超过了规定范围,可以使用isFinite()函数
var box = 100e10000;
alert(isFinite(box));
NaN值,这个数值表示本来应该返回一个数值但是未返回数值的情况。
alert(0/0) // NaN
可以通过Number.NaN,得到NaN值,任何与NaN运算的结果均为NaN。并且NaN与NaN并不是相等的
alert(Number.NaN) // NaN
alert(NaN+1) // NaN
alert(NaN == NaN) // false
ECMAScript提供了isNaN()函数。用来判断这个值是不是NaN。isNaN()函数在接收到一个值之后会尝试将这个值转换为数值
alert(isNaN(25)) // false
alert(isNaN(NaN)) // true
有三个函数可以把非数值类型转换为数值;Number()、parseInt()、parseFloat()。Number()函数是转型函数,可以用于任何类型的数据类型,而另外的两个专门用于把字符串转换为数值
Number(true) // 1
Number(20) // 20
Number(null) // 0
Number(undefined) // NaN
如果是字符串,应该遵循以下规则
1,只包含数值的字符串,会直接转化成十进制数值,如果包括前导0,则直接把0去掉
alert(Nubmer("456")) // 456
alert(Number("070")) // 70
2,只包含浮点值的字符串,则直接转化为对应的浮点值,如果包含前导和后导0,即自动去掉
alert(Number("12.30")) // 12.3
3,如果字符串是空。则直接返回0
alert(Number("")) // 0
4,如果不是以上三种类型,则返回NaN
alert(Number("Lee12")) // NaN
5,如果是对象,首先会调用valueOf()方法,然后确定该值是否可以转化为数字,如果转换的结果为NaN,则会继续调用toString()方法。
var box =
{
toString:function{
return "123";
}
}
由于Number()函数在转换字符串的时候比较复杂并且不够合理,因此 在处理的时候更多的应用的是parseInt()。
1 alert(parsetInt('456Lee')); //456,会返回整数部分 2 alert(parsetInt('Lee456Lee')); //NaN,如果第一个不是数值,就返回 NaN 3 alert(parseInt('12Lee56Lee')); //12,从第一数值开始取,到最后一个连续数值结束 4 alert(parseInt('56.12')); //56,小数点不是数值,会被去掉 5 alert(parseInt('')); //NaN,空返回 NaN
parseInt()除了能够识别十进制数据还能够识别八进制和十六进制数据
1 alert(parseInt('0xA')); //10,十六进制 2 alert(parseInt('070')); //56,八进制 3 alert(parseInt('0xALee')); //100,十六进制,Lee 被自动过滤掉
ECMAScript为parseInt() 提供了第二个参数,用于解决各种进制之间的转换
1 alert(parseInt('0xAF')); //175,十六进制 2 alert(parseInt('AF',16)); //175,第二参数指定十六进制,可以去掉 0x 前导 3 alert(parseInt('AF')); //NaN,理所当然 4 alert(parseInt('101010101',2)); //314,二进制转换 5 alert(parseInt('70',8)) //56,八进制转换
parseFloat()是用于浮点数值转换的。和parseInt()一样,从第一位解析到非浮点数值位置
1 alert(parseFloat('123Lee')); //123,去掉不是别的部分 2 alert(parseFloat('0xA')); //0,不认十六进制 3 alert(parseFloat('123.4.5')); //123.4,只认一个小数点 4 alert(parseFloat('0123.400')); //123.4,去掉前后导 5 alert(parseFloat('1.234e7')); //12340000,把科学技术法转成普通数值
六:String类型
字符串类型包含了一些特殊的字符字面量。称为转义字符
1 字面量 含义 2 \n 换行 3 \t 制表 4 \b 空格 5 \r 回车 6 \f 进纸 7 \\ 斜杠 8 \' 单引号 9 \" 双引号 10 \xnn 以十六进制代码 nn 表示的一个字符(0~F)。例:\x41 11 \unnn 以十六进制代码 nnn 表示的一个 Unicode 字符(0~F)。 例: \u03a3
七:Object类型
var box = new Object();