<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Oo緣來(lái)是你oO


    posts - 120,comments - 125,trackbacks - 0
    ?????????????????????????????? JavaScript中的Boolean,你了解多少?
    ???????????????????????????????????????????????????????馬嘉楠??????2006-10-30


    今天看了一下Flyingis寫的《ECMAScript 基礎(chǔ)》一文。在看到
    Boolean類這一塊內(nèi)容的時(shí)候,隨手寫了幾行代碼,問(wèn)題出現(xiàn)了^+^
    注:此文討論的是JavaScript1.5


    還是先來(lái)看一段非常簡(jiǎn)單的代碼

    // 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 之間的區(qū)別么?(你一定對(duì)code:1最為熟悉,這是我們最常用的)
    你知道code:5 的輸出結(jié)果么?(可以先想想,在運(yùn)行代碼看結(jié)果,如果不明白,可以繼續(xù)看下去)


    如果你已經(jīng)開始頭暈了,那就暫時(shí)不去想了,看我下面的解釋。
    如果你都知道了(哇,高手啊,呵呵^+^),那我還有個(gè)問(wèn)題需要你的解答,在此先謝過(guò)了。


    正文:
    JavaScript中的Boolean類型

    1.???我們所熟悉的

    var x = false;
    var y = true;

    這是我們大家都熟悉的,此時(shí)我們使用的是原始的Boolean值(the primitive Boolean values )true和false

    2.???我們很少用到的

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

    此時(shí)我們聲明了一個(gè)Boolean對(duì)象,Boolean對(duì)象是對(duì)Boolean值的一個(gè)封裝。
    Boolean對(duì)象:一個(gè)值為true或false的Boolean對(duì)象。

    原始的Boolean值和Boolean對(duì)象是有區(qū)別的,不要相互混淆,引用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.???區(qū)別

    區(qū)別(1):???聲明形式

    區(qū)別(2):???在條件語(yǔ)句(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");


    輸出結(jié)果:

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


    當(dāng)一個(gè)值為false的Boolean對(duì)象放到條件語(yǔ)句當(dāng)中的時(shí)候,Boolean對(duì)象的值會(huì)被當(dāng)作true來(lái)計(jì)算,但是它本身的值并沒(méi)有改變,依然是false。很有趣,我只知道現(xiàn)象,具體原因不清楚,不知道發(fā)明者出于什么地考慮。但是在JavaScript1.2或者更早的版本中卻有所不同,在條件語(yǔ)句(condition statement)中,Boolean對(duì)象的計(jì)算返回的是其對(duì)應(yīng)的原始Boolean的值。


    區(qū)別(3):初始化Boolean對(duì)象

    聲明一個(gè)Boolean對(duì)象,如果我們用一個(gè)值為false的Boolean對(duì)象對(duì)其進(jìn)行初始化,則新的Boolean對(duì)象的值為true

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

    原始的Boolean值和Boolean對(duì)象區(qū)別如此之大,所以切記二者區(qū)別,不要混淆使用。

    對(duì)于code:5 的輸出結(jié)果,你現(xiàn)在明白是什么原因了吧。



    上面的東東我也是今天遇到了問(wèn)題,查了一些資料才知道,學(xué)無(wú)止境啊。可是我的問(wèn)題依然沒(méi)有解決。
    我的問(wèn)題是關(guān)于Boolean對(duì)象的初始化。代碼如下,

    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);

    結(jié)果:

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

    js.JPG


    我對(duì)ob2 和 ob3的結(jié)果不太理解,為什么我只是更改了ob1和true的順序,結(jié)果去完全不同了。并且可以發(fā)現(xiàn),結(jié)果均等于操作符“&&”后面的值。

    希望大家能告訴我!


    問(wèn)題已經(jīng)解決:

    ||是這樣運(yùn)算的:從第一個(gè)開始,遇到有意義的返回,否則返回最后一個(gè)表達(dá)式(注意不一定是Boolean值);

    &&是這樣運(yùn)算的:從第一個(gè)開始,遇到無(wú)意義的返回,否則返回最后一個(gè)表達(dá)式(注意同上);

    !是這樣運(yùn)算的:
    對(duì)表達(dá)式的值取非(注意不是對(duì)表達(dá)式)。

    什么是無(wú)意義呢:如下六個(gè) 0,null,undefined,"",false,NaN。除此,視為有意義。

    new Boolean(),new Boolean(false)是同一個(gè)東西,由于它是一個(gè)對(duì)象,故是有意義的,但其值為false,所以,可以看為“有意義的false”,所以結(jié)果為最后一個(gè)表達(dá)式的值。

    謝謝
    jeffjie

    繼續(xù)學(xué)習(xí)^+^






    馬嘉楠
    jianan.ma@gmail.com

    posted on 2006-10-30 23:41 馬嘉楠 閱讀(4953) 評(píng)論(14)  編輯  收藏 所屬分類: Java Script

    FeedBack:
    # re: JavaScript中的Boolean,你了解多少?
    2006-10-31 00:17 | JonneyQuest
    好像JavaScript的設(shè)計(jì)者把簡(jiǎn)單的事情做得復(fù)雜了。
    這么設(shè)計(jì)有意義嗎?  回復(fù)  更多評(píng)論
      
    # re: JavaScript中的Boolean,你了解多少?
    2006-10-31 00:53 | jeffjie

    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("yObject = false");
    這個(gè)的原因我憑自已的經(jīng)驗(yàn)解釋一下:
    javascript 的 if表達(dá)式內(nèi)的表達(dá)式如果不是比較表達(dá)式,即不是類似 == < > 這類的表達(dá)式時(shí),會(huì)把里面的表達(dá)式當(dāng)作一個(gè)對(duì)象來(lái)處理,只要這個(gè)對(duì)象不為空,就返回true,正如new Boolean(false)是一個(gè)Boolean的對(duì)象,不為空。如果你的表達(dá)式是這樣:if(xObject.valueOf() == true)的話,這時(shí)候就會(huì)返回Flase了。
    個(gè)人意見(jiàn),python也是這樣處理if的表達(dá)式。

    至于
    var ob1 = new Boolean(false);
    var ob2 = (ob1&&true);
    var ob3 = (true&&ob1);
    這個(gè),我重現(xiàn)不了您說(shuō)的結(jié)果。
      回復(fù)  更多評(píng)論
      
    # re: JavaScript中的Boolean,你了解多少?
    2006-10-31 01:17 | 馬嘉楠
    @jeffjie

    謝謝啦
    問(wèn)題已經(jīng)解決:

    ||是這樣運(yùn)算的:從第一個(gè)開始,遇到有意義的返回,否則返回最后一個(gè)表達(dá)式(注意不一定是Boolean值);

    &&是這樣運(yùn)算的:從第一個(gè)開始,遇到無(wú)意義的返回,否則返回最后一個(gè)表達(dá)式(注意同上);

    !是這樣運(yùn)算的:對(duì)表達(dá)式的值取非(注意不是對(duì)表達(dá)式)。

    什么是無(wú)意義呢:如下六個(gè) 0,null,undefined,"",false,NaN
    除此,視為有意義。

    new Boolean(),new Boolean(false)是同一個(gè)東西,由于它是一個(gè)對(duì)象,故是有意義的,但其值為false,所以,可以看為“有意義的false”,(正如你所說(shuō)的一樣)。
    所以結(jié)果為最后一個(gè)表達(dá)式的值。

    繼續(xù)學(xué)習(xí)^+^
      回復(fù)  更多評(píng)論
      
    # re: JavaScript中的Boolean,你了解多少?
    2006-10-31 02:14 | jeffjie
    長(zhǎng)知識(shí)了。謝謝。不過(guò)你最后的那個(gè)例子,在我的機(jī)子上的確重現(xiàn)不了。
    firefox1.5 ubuntu。。
    明天回公司用IE估計(jì)可以重現(xiàn)。應(yīng)該是Javascipt的支持不同的原因。
    像上面的情況,的確有點(diǎn)令人費(fèi)解。盡管是有道理。。呵  回復(fù)  更多評(píng)論
      
    # re: JavaScript中的Boolean,你了解多少?
    2006-10-31 09:04 | xinheqishi
    長(zhǎng)見(jiàn)識(shí)了,謝謝樓主。
    *****************************************************
    ||是這樣運(yùn)算的:從第一個(gè)開始,遇到有意義的返回,否則返回最后一個(gè)表達(dá)式(注意不一定是Boolean值);

    &&是這樣運(yùn)算的:從第一個(gè)開始,遇到無(wú)意義的返回,否則返回最后一個(gè)表達(dá)式(注意同上);

    !是這樣運(yùn)算的:對(duì)表達(dá)式的值取非(注意不是對(duì)表達(dá)式)。
    *****************************************************
    請(qǐng)問(wèn)在java中這些運(yùn)算符號(hào)也是這樣操作的嗎??  回復(fù)  更多評(píng)論
      
    # re: JavaScript中的Boolean,你了解多少?
    2006-10-31 10:22 | 馬嘉楠
    @xinheqishi

    *************************
    請(qǐng)問(wèn)在java中這些運(yùn)算符號(hào)也是這樣操作的嗎??
    *************************
    提示如下:
    The operator && is undefined for the argument type(s) Boolean, boolean.

    如果把ob1進(jìn)行一下轉(zhuǎn)換就可以了,ob1.booleanValue(),但是此時(shí)該表達(dá)式已經(jīng)是原始Boolean值false,所以結(jié)果為false.同時(shí)需要把ob2,ob3的類型改為boolean。
    如果把true改為Boolean.valueOf(true),依然提示錯(cuò)誤:
    The operator && is undefined for the argument type(s) Boolean, Boolean.


    代碼如下:
    Boolean ob1 = new Boolean(true);
    boolean ob2 = ( ob1.booleanValue() && true );
    boolean ob3 = ( true && ob1.booleanValue() );
    System.out.println("ob2 = " + ob2 + " ob3 = " + ob3);
    輸出結(jié)果:
    ob2 = true ob3 = true


    當(dāng)然,如果是操作符“&&”,遇到值為false的表達(dá)式就不再往下繼續(xù)計(jì)算,直接返回結(jié)果false.如果是操作符“||”,遇到值為true的表達(dá)式就不再繼續(xù)往下計(jì)算,直接返回結(jié)果true。 這個(gè)我們都知道,這種計(jì)算叫什么名字我突然想不起來(lái)了,呵呵
      回復(fù)  更多評(píng)論
      
    # re: JavaScript中的Boolean,你了解多少?
    2006-10-31 21:02 | Larry.Zhao
    其實(shí)就是這樣的,如果是對(duì)象的話,javascript是用對(duì)象存在與否來(lái)做條件判斷的,就是如果你給了一個(gè)沒(méi)有初始化的對(duì)象:if(a),那么就會(huì)被視為非真,這個(gè)在程序語(yǔ)言中是這樣表示的: if(a == null),但是在js里面可以表示為if(a)  回復(fù)  更多評(píng)論
      
    # re: JavaScript中的Boolean,你了解多少?
    2006-10-31 21:29 | Flyingis
    @馬嘉楠
    var obj = new Boolean(false);
    if(obj) {
    alert("a");
    }
    else {
    alert("b");
    }
    這段代碼返回的結(jié)果正如jeffjie所說(shuō),if判斷的是對(duì)象是否存在,而不是對(duì)象的值。

    "這種計(jì)算叫什么名字我突然想不起來(lái)了"
    這是布爾運(yùn)算。
    需要注意的是,在Java或C#中&&和&、||和|計(jì)算方式是有差別的,一種是兩側(cè)均進(jìn)行計(jì)算,一種是滿足判斷條件則立即返回,布爾表達(dá)式的運(yùn)算方向是從右到左。

    JavaScript這種語(yǔ)言除具有自身語(yǔ)法特點(diǎn)外,還受到瀏覽器兼容性、版本的影響,不同的瀏覽器及相同瀏覽器的不同版本對(duì)于JavaScript版本的支持是不同的,深究其語(yǔ)法有時(shí)會(huì)讓人很費(fèi)解。  回復(fù)  更多評(píng)論
      
    # re: JavaScript中的Boolean,你了解多少?
    2006-10-31 22:01 | 馬嘉楠
    @Flyingis

    確實(shí)讓人費(fèi)解
    不過(guò)現(xiàn)在至少明白了一些JavaScript中的對(duì)象

    謝拉

      回復(fù)  更多評(píng)論
      
    # re: JavaScript中的Boolean,你了解多少?
    2012-08-09 10:45 | mrsy
    var resX = new Boolean(null);
    document.writeln(resX); //true
    document.writeln(resX.toString());//false
    誰(shuí)能給我解釋一下這個(gè)是什么原因  回復(fù)  更多評(píng)論
      
    # re: JavaScript中的Boolean,你了解多少?[未登錄](méi)
    2013-12-19 13:51 | hewei
    typeof true 'boolean'
    type of new Boolean(false) 'object'
    object 總為真   回復(fù)  更多評(píng)論
      
    # re: JavaScript中的Boolean,你了解多少?
    2015-10-31 10:43 | ezqrq
    @jeffjie
    對(duì),所有的布爾對(duì)象要引用都需用(==true)判斷;如果要輸出值應(yīng)該這樣
    var a;
    var ob1 = new Boolean(false);
    if (ob1==true)
    a==true;
    else
    a==false;
    然后用a代替ob1;
      回復(fù)  更多評(píng)論
      
    # re: JavaScript中的Boolean,你了解多少?
    2015-10-31 11:02 | ezqrq
    除此之外,容易混淆的還有數(shù)組與Array對(duì)象;數(shù)與Number對(duì)象;字符串和String對(duì)象;事件與Event對(duì)象  回復(fù)  更多評(píng)論
      
    # re: JavaScript中的Boolean,你了解多少?
    2015-10-31 11:52 | 伊澤godv
    var s = "Test", S=new String("Test");
    console.log(s == S);//true
    console.log(s === S);//false  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 久久久久亚洲精品影视| 亚洲最大激情中文字幕| 四虎影视永久免费视频观看| 免费一级毛片在线播放| 亚洲午夜久久久久久噜噜噜| 亚洲AV人无码综合在线观看| 亚洲国产模特在线播放| mm1313亚洲国产精品无码试看| 五月天婷婷精品免费视频| 18禁超污无遮挡无码免费网站 | 青柠影视在线观看免费| 69免费视频大片| 成年女人毛片免费观看97| 亚洲精品国产高清嫩草影院| 久久精品夜色国产亚洲av| 亚洲制服丝袜第一页| 男人j进女人p免费视频| 久草福利资源网站免费| 四虎成人精品一区二区免费网站| 亚洲精品国精品久久99热| 亚洲视频在线观看一区| 亚洲爆乳大丰满无码专区| 在线观看免费无码视频| 性xxxxx免费视频播放| 亚洲精品国产高清不卡在线| 亚洲高清视频免费| 国产尤物在线视精品在亚洲| 午夜精品一区二区三区免费视频 | 国产91色综合久久免费分享| 免费观看国产精品| 亚洲精品456在线播放| 特级毛片免费播放| 五月亭亭免费高清在线| 亚洲国产精品一区二区第一页免| 亚洲网址在线观看| 羞羞视频在线观看免费| 4399好看日本在线电影免费| 综合亚洲伊人午夜网| 亚洲精品无码av片| 无码国产精品一区二区免费vr| 国产成人涩涩涩视频在线观看免费|