javascript 中的数据类型

javascript 中有5中数据类型:undefined、null、Boolean、Number、String,用typeof 检测数据类型。

1 Undefined :Undefined  只有一个值,即 undefined ,在用 var 声明变量但未对其加以初始化时,这个变量就是undefined。

注意:对未声明的变量执行typeof 返回的也是 undefined。

 

2  Null:NUll也只有一个值,null。从逻辑角度看,null 表示一个空对象指针。所以  typeof  null 返回的是 object。实际上,undefined 是派生自null 值的,所以 null ==undefined 返回的是 true。

 

3 Boolean:有两个值,true 和 false。Boolean  类型的字面值 true 和 false  是区分大小写的。也就是说 True  和  False  都不是Boolean 值,只是标识符。可以对任何数据类型的值调用Boolean()函数,而且总会返回一个Boolean 值。

 var flag = "Hello World!";
 var msg = Boolean(flag);

  各种数据类型与Boolean类型的转换规则如下表所述:

数据类型 转换为true 转换为false
Boolean true false
 String  任何非空字符串  ""空字符串 
 Number  任何非0数值,包括无穷大  0和NaN
 Object  任何非空对象  null
 Undefined  n/a(not applicable 不适用)  undefined

 根据以上规则,我们可以写出下面的一个代码实例:

复制代码
function test(){
   var flag = "Hello World!";
   if(flag){
       alert("write:true");
   }else{
       alert("write:false");
   }
}

 

4 Number:用IEEE754 格式来表示整数和浮点数,为了支持各种数值类型,ECMA-262 定义了不同的数值字面量格式。

var intNum = 55;//十进制整数

var octalNum = 070;//八进制 56,以8为基数,八进制字面值得第一位必须是0,后然是八进制数字序列0~7,如果字面值超出了范围,那么前导0将被忽略,后面竖直将被当作十进制解析。

var hexNum = 0x1f;//十六进制的31,前两位必须是0x,后面跟0~9及A~F(大小写都可以)的十六进制数字序列。

(1)浮点数:可以用科学记数法表示,3.125e7、3e-7。浮点数值的最高精度是17为小数,但在进行算术计算时其精度远远不如整数。例如,0.1 加 0.2 的结果不是0.3,而是0.30000000000000004。这个小小的舍入误差会导致无法测试特定的浮点数值。例如

if(a + b ==0.3){

  alert("You got 0.3 . ");

}

在这个例子中,我们测试的是两个数的和是不是等于0.3。如果这两个数是0.05 和0.25,或者是0.15 和 0.15 都不会有问题,但如果是0.1 和 0.2,那么测试将无法通过。所以,永远不要测试某个特定的浮点数值。(浮点数计算产生误差的问题,是基于IEEE754 数值的浮点计算的通病,所以其他语言也存在这个问题。)

(2)数值范围:5e-324 到 1.7976931348623157e+308。如果数值超出范围,则自动转换成特殊的Infinity(-Infinity) 值,这时,该值将无法继续参与下一次计算。要判断一个数值是不是无穷可以用isFinite()函数。

(3)NaN:非数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况,例如任何数值除以0 返回NaN。任何涉及NaN的操作(NaN/10)都会返回NaN,NaN与任何值都不相等,包括NaN 本身。用isNaN()可以判断是不是"不是数值",isNaN ()也适用于对象。

(4)数值转换:Number()、parseInt()、parseFloat()。Number():可以用于任何数据类型。ParseInt()、parseFloat():专门用于把字符串转换成数值。三个函数对于同样的输入会有返回不同的结果。

Number()函数的转换规则如下:

     如果是Boolean 值,true 和 false 分别被转换成1和0;

     如果是数字,只是简单的传入和返回;

     如果是null ,返回0;

     如果是undefined ,返回NaN;

     如果是字符串,遵循下面的规则:

     如果字符串只包含数字(包括前面带正负号的情况),则将其转换为十进制数值,如"011"会变成11(前导0被忽略);

     如果字符串中包含有效的浮点格式,则将其转换成浮点值(前导0被忽略);

     如果字符串中包含有效的十六进制,如"0xf",则将其转换成相同大小的十进制整形数值;

     如果字符串是空的(不包含任何字符),则转换成0 ;

     如果字符串中包含除上述以外的字符,则将其转换成NaN;

     如果是对象,调用valueOf()方法,依照前面规则转换。

parseInt():该函数在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直到找到第一个非空字符。如果第一个非空字符不是数字字符或负号,就会返回NaN,即parseInt("")=NaN,而Number("")=0,parseInt('1234blue ')=1234,parseInt('22.5')=22。parseInt('0xAF',16) =parseInt('AF',16),第二个参数指定是十六进制。

parseFloat():与ParseInt()类似,区别是:字符串中第一个小数点是有效的,后面的就是无效的;还有它只解析十进制的,没有第二个参数。

 

5 String:字符串,该类型包含一些特殊字符,即转义序列。

转换成字符串的方法:

toString():数值、布尔值、对象、字符串值都有这个方法,但是null、undefined的值没有这个方法;该方法可以传递参数,即二进制、十进制等,num.toString(10);

String():其他类型与toString()相同,但是null 返回"null",undefined 返回"undefined"。

 

6 特殊类型:Object

创建:var o = new Object();

构造函数constructor:如 Object();

检测属性是否存在hasOwnProperty():o.hasOwnProperty("name");

toString();

valueOf();

 

posted on 2014-12-02 17:05  summerzi  阅读(207)  评论(0编辑  收藏  举报

导航