zoukankan      html  css  js  c++  java
  • 【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”,所以结果为最后一个表达式的值。


  • 相关阅读:
    HDU 1010 Tempter of the Bone
    HDU 4421 Bit Magic(奇葩式解法)
    HDU 2614 Beat 深搜DFS
    HDU 1495 非常可乐 BFS 搜索
    Road to Cinema
    Sea Battle
    Interview with Oleg
    Spotlights
    Substring
    Dominating Patterns
  • 原文地址:https://www.cnblogs.com/sniper007/p/2222473.html
Copyright © 2011-2022 走看看