• 【javascript基础】之【JavaScript中的Boolean,你了解多少?】


                                   JavaScript中的Boolean,你了解多少?
                                                           马嘉楠      2006-10-30


    今天看了一下Flyingis写的《ECMAScript 基础》一文。在看到
    Boolean类这一块内容的时候,随手写了几行代码,问题出现了^+^
    注:此文讨论的是JavaScript1.5


    还是先来看一段非常简单的代码

    // code:1
    var  x  =   false ;   
    var  y  =   true
    ;

    // code:2

    var  xObject  =   new  Boolean( false );
    var  yObject  =   new  Boolean( true
    );

    // code:3

    var  resX  =   new  Boolean(x);
    var  resY  =   new
     Boolean(y);

    // code:4

    var  resXObject  =   new  Boolean(xObject);
    var  resYObject  =   new
     Boolean(yObject);

    // code:5

    alert( " resX =  "   +  resX  +   "  and resY =  "   +  resY);
    alert(
    " resXObject =  "   +  resXObject  +   "  and resYObject =  "   +  resYObject);

    你明白code:1~4 之间的区别么?(你一定对code:1最为熟悉,这是我们最常用的)
    你知道code:5 的输出结果么?(可以先想想,在运行代码看结果,如果不明白,可以继续看下去)


    如果你已经开始头晕了,那就暂时不去想了,看我下面的解释。
    如果你都知道了(哇,高手啊,呵呵^+^),那我还有个问题需要你的解答,在此先谢过了。


    正文:
    JavaScript中的Boolean类型

    1.   我们所熟悉的

    var x = false;
    var y = true;

    这是我们大家都熟悉的,此时我们使用的是原始的Boolean值(the primitive Boolean values )true和false

    2.   我们很少用到的

    var xObject = new Boolean(false);
    var yObject = new Boolean(true);

    此时我们声明了一个Boolean对象,Boolean对象是对Boolean值的一个封装。
    Boolean对象:一个值为true或false的Boolean对象。

    原始的Boolean值和Boolean对象是有区别的,不要相互混淆,引用Core JavaScript 1.5 Reference中的一句话:Do not confuse the primitive Boolean values true and false with the true and false values of the Boolean object.


    3.   区别

    区别(1):   声明形式

    区别(2):   在条件语句(condition statement)中

    var x = false;
    var xObject = new Boolean(false);

    if(x)
        alert(
    "x = true");
    else
        alert(
    "x = false");

    if(xObject)
        alert(
    "xObject = " + xObject + ", but in the condition statement, the xObject value is evaluated to true");
    else
        alert(
    "xObject = false");


    输出结果:

    = false
    xObject 
    = false,  but in the condition statement, the xObject value is evaluated to true


    当一个值为false的Boolean对象放到条件语句当中的时候,Boolean对象的值会被当作true来计算,但是它本身的值并没有改变,依然是false。很有趣,我只知道现象,具体原因不清楚,不知道发明者出于什么地考虑。但是在JavaScript1.2或者更早的版本中却有所不同,在条件语句(condition statement)中,Boolean对象的计算返回的是其对应的原始Boolean的值。


    区别(3):初始化Boolean对象

    声明一个Boolean对象,如果我们用一个值为false的Boolean对象对其进行初始化,则新的Boolean对象的值为true

    var xObject = new Boolean(false);
    var resXObject = new Boolean(xObject);
    alert(
    "The resXObject value is " + resXObject);

    原始的Boolean值和Boolean对象区别如此之大,所以切记二者区别,不要混淆使用。

    对于code:5 的输出结果,你现在明白是什么原因了吧。



    上面的东东我也是今天遇到了问题,查了一些资料才知道,学无止境啊。可是我的问题依然没有解决。
    我的问题是关于Boolean对象的初始化。代码如下,

    var ob1 = new Boolean(false);
    var ob2 = (ob1&&true);
    var ob3 = (true&&ob1);
    var ob4 = Boolean(ob1&&true);
    var ob5 = Boolean(true&&ob1);
    alert(
    "ob2 = " + ob2 + " ob3 = " + ob3 + " ob4 = " + ob4 + " ob5 = " + ob5);

    结果:

    ob2 = true ob3 = false ob4 = true ob5 = true

    js.JPG


    我对ob2 和 ob3的结果不太理解,为什么我只是更改了ob1和true的顺序,结果去完全不同了。并且可以发现,结果均等于操作符“&&”后面的值。

    希望大家能告诉我!


    问题已经解决:

    ||是这样运算的:从第一个开始,遇到有意义的返回,否则返回最后一个表达式(注意不一定是Boolean值);

    &&是这样运算的:从第一个开始,遇到无意义的返回,否则返回最后一个表达式(注意同上);

    !是这样运算的:
    对表达式的值取非(注意不是对表达式)。

    什么是无意义呢:如下六个 0,null,undefined,"",false,NaN。除此,视为有意义。

    new Boolean(),new Boolean(false)是同一个东西,由于它是一个对象,故是有意义的,但其值为false,所以,可以看为“有意义的false”,所以结果为最后一个表达式的值。


  • 相关阅读:
    asd
    自勉
    php cli 参数
    编译
    WebMisSharp的协同开发
    WebMisDeveloper4.5.0 基于Ext.net,Extjs,MVC/简单三层的自动生成开发利器
    WebMisDeveloper更新专版
    外设驱动库开发笔记37:S13365BQ光敏二极管作为光度计驱动
    Java学习笔记之多线程 生产者 消费者
    Java学习笔记之IO流&Properties集合
  • 原文地址:https://www.cnblogs.com/sniper007/p/2222473.html
Copyright © 2020-2023  润新知