左手抓右手

右手加左手

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  由于环境关系,今天下定决心,要在半年之内,让自己的技术水平有一个很大的提高,而不能仅仅限于在自己的工作范围之内,但是我做的工作,绝不是为了某些人而做,是为了给自己争口气,即所谓人活一张脸,树活一张皮!废话少说,进入正题,接着昨天的题目,继续js的数据类型。

Boolean类型

  Boolean类型是js中使用的最多的一种数据类型,该类型只有两个值:true和false。这两个数值和数字值不是一回事,因此true不一定等于1,false也不一定等于0。如下实例是为变量赋Boolean类型值的例子:

   var flag = true;
   var lost = false;

  关于Boolean类型有一点需要注意的是Boolean类型的字面值是区分大小写的,也就是说True和False并不是Boolean类型数据,而只是普通标示符,但未了增加代码的易读性和避免一些不必要的问题出现,不建议用这两个标示符做变量。

  虽然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  undefined

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

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

Number类型

  ECMAScript是使用IEEE754格式来表示整数和浮点数值。为了支持各种数值类型,ECMAScript-262定义了各种不同的数值字面量格式,常用的有十进制、八进制、二进制和十六进制。对于这些不同进制的数值转换,不在此一一介绍,如果需要,我会在后续的blog中详细描述。

  上面说的是整数类型,还有一个浮点类型,浮点类型就是带小数点的数值,浮点数里面有一个知识点就是科学计数法,不在此介绍,我会在后续blog中一一陈述。

  Number类型数据有一个数值范围的问题。ECMAScript并不能保存世界上所有的数值,最小的数值保存在Number的MIN_VALUE属性中,在大多数浏览器中的值是5e-324,最大值保存在Number的MAX_VALUE属性中,在大多数浏览器中的这个值是1.7976931348623157+308。如果计算的结果超出了这两个最值,那么久会得到一个特殊的Infinity,如果是负数,则相应的转为-Infinity(无穷)。Infinity是一个不能够参与计算的数值。如果不确定参与计算的数值是否为Infinity,可以使用isFinite()检测。如果是介于Infinity和-Infinity之间的数值,则返回true。

  Number类的NEGATIVE_INFINITY和POSITIVE_INFINITY这两个属性分别保存着-Infinity和Infinity。

NaN类型

  NaN(not a Number)是一个特殊的数值。在其他的编程语言中,任何数除以0都会返回异常,导致停止代码执行,而在js中,则会返回一个NaN,不会影响其他代码的执行。NaN本身有两个特点:

  1. 任何涉及到NaN的操作都会返回NaN,但是这个特点在多步计算中可能导致问题;
  2. NaN和任何值都不相等,包括NaN本身。

ECMAScript中的isNaN(para)可以用来判断参数是否“不是数值”。isNaN(para)在接收到一个值之后,会尝试将这个值转换为数值,某些不是数值的值可能会被转换成数值,如“10”或Boolean值。如下实例所示:

    document.write(isNaN("10"));  //false ,"10"被转换成10
    document.write(isNaN(10));   //false,10是数字
    document.write(isNaN(false));  // false,false被转换成0
    document.write(isNaN(NaN));  //true,NaN不是 数值
    document.write(isNaN("str"));  //true,"str"不是数值

  isNaN(para)也适用于对象。在基于对象调用isNaN()时,首先会调用对象的valueOf(),然后确定该返回值可否被转换成数值,如果不能,则再基于这个值调用toString()方法,再测试这个返回值。

posted on 2012-05-28 22:25  yansj1997  阅读(889)  评论(0编辑  收藏  举报