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();

 

  

posted on 2013-12-20 17:04  CalmEric  阅读(261)  评论(0编辑  收藏  举报