posts - 22, comments - 17, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

AS2:细看NaN常数

Posted on 2007-09-10 15:30 flashlizi 阅读(1046) 评论(0)  编辑 收藏 引用 所属分类: AS2
NaN常数,是一个非常特殊的number。它表示非数字,其值为IEEE-754,但是它的数据类型是number。很自然的,大家会想到另外的常数undefined、null,不过它们确有很大的差别。

先看如下代码:

var str3;
var str4;
trace(str3
==str4);

从上面我们可以看到trace出来的结果为true,即undefined与undefined比较时结果为相等。另外,我们还可以实验得出对null和undefined进行比较时,它们的比较结果也为相等。(不过,null和undefined做全等比较的时候则不相等。)

我们再来看看下面的代码:

var str1 = "flashrek";
var str2 
= "flashlizi";
trace(Number(str1));
trace(Number(str2));
trace(Number(str1) 
== Number(str2));

这个时候,我们发现NaN和NaN比较的时候,它们却并不相等。因此我们并不能用Number(str1)!=NaN来判断一个对象是否为数字。当然我们可以用Number(str1).toString()=="NaN"这种转化的方式来判断是否为数字,不过AS2中提供了一个更好的办法:isNaN函数。从下面的实验我们可以看出isNaN函数有着更好的效率:

var time:Number;
var str:String 
= "flashrek.com";
do_isNaN();
do_Number();
function do_isNaN() 
{
    time 
= getTimer();
    
for (var i = 0; i < 100000; i++{
        isNaN(str);
    }

    trace(getTimer() 
- time);
}

function do_Number() 
{
    time 
= getTimer();
    
for (var i = 0; i < 100000; i++{
        Number(str).toString() 
== "NaN";
    }

    trace(getTimer() 
- time);
}
只有注册用户登录后才能发表评论。