天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

javascript里的條件判斷

JavaScript 是一種可以在瀏覽器中運(yùn)行的腳本語(yǔ)言,是一種弱語(yǔ)言(相對(duì)于C,C#,Java而言),只要是計(jì)算機(jī)語(yǔ)言就會(huì)使用到條件判斷式,而JavaScript作為一種“弱”語(yǔ)言,它的條件判斷常常令人困惑不解,特別是有其它強(qiáng)語(yǔ)言編程經(jīng)歷的人來(lái)說(shuō),更是不可理喻!高手和無(wú)惑的人別取笑,我自己也曾經(jīng)有一段時(shí)間郁悶過(guò)。先寫(xiě)一個(gè)例子吧:

var s = "meizz";
if (s && s==true)
{
    alert("Is true");
}

    咱先不管上面的代碼運(yùn)行的結(jié)果正確與否,我給變量 s 賦的是字符型,而在后面的 if 條件判斷式里是直接把變量 s 作為一個(gè)判斷表達(dá)式寫(xiě)出的,若是在強(qiáng)語(yǔ)言里對(duì)字符型的變量要么是判斷它的類型是否是字符型或者是判斷這個(gè)變量的值是否等于某字符串,但在 Javascript 里就是沒(méi)有用類型判斷(typeof)也沒(méi)有值判斷(==)而就是這么孤伶伶地在那里,就可以作為一個(gè)條件判斷表達(dá)式。當(dāng)然這種單獨(dú)作為條件表達(dá)式不只是字符型變量,也可以是數(shù)字型變量,也可以是一個(gè)對(duì)象,也可以是一個(gè)函數(shù)或者方法等等。這就正是這種語(yǔ)法令人費(fèi)解的地方。

    我測(cè)試統(tǒng)計(jì)了一下:在 JavaScript 里,不為空 "" 的字符串、不為 0 的數(shù)字、不為 null 的對(duì)象、不為 undefined 的對(duì)象屬性、布爾型 true,單獨(dú)作為判斷式里的一個(gè)表達(dá)式時(shí) JavaScript 通通認(rèn)定為真(true),反之則為假(false)。

    原因?yàn)槭荍S腳本沒(méi)有強(qiáng)變量類型,你前一句賦值 var s = "meizz"; 后一句你甚至馬上可以寫(xiě)成 s = function(){}; ,中間沒(méi)有任何的類型轉(zhuǎn)換,而這些寫(xiě)法在強(qiáng)語(yǔ)言里是不可思議的,甚至是大逆不道的(根本就不支持這種語(yǔ)法),但在JS腳本里卻是那么的自然。原因就是沒(méi)有強(qiáng)制變量類型, 變量類型是動(dòng)態(tài)的,也就是說(shuō)變量本身是沒(méi)有類型的,變量的值是有類型的。呵呵,這里扯到其它模塊去了,嗯,關(guān)于變量類型我另外再寫(xiě)文章討論吧。

    說(shuō)到這里,就不難理解 if (s && .....這句的判斷式了,同樣的道理,我甚至可以 function s(){} 然后再用 if (s && .... 或者 var s = document.getElementById("ObjectId");  if (s && .... 這樣語(yǔ)法在JS腳本里都是沒(méi)錯(cuò)的,至于判斷的結(jié)果可以參考上面的那段統(tǒng)計(jì)結(jié)果。

    現(xiàn)在再來(lái)討論上面的那幾句代碼的運(yùn)行結(jié)果,多個(gè)條件判斷式的結(jié)果合成運(yùn)行只有“與”和“或”,到于“非”因?yàn)樗且辉\(yùn)行符,只針對(duì)單個(gè)值,比如 if (!s) ... 至于條件式不只一個(gè)的時(shí)候條件式的結(jié)果只有與和或的運(yùn)行。與(&&),或(||)。上面的那句條件式:if (s && s==true) 就是兩個(gè)條件式的合成判斷。至于與運(yùn)算(只要一個(gè)值為false則值為false)或運(yùn)算(只要一個(gè)值為true則值為true)這些運(yùn)算細(xì)節(jié)我就不多說(shuō)了,教科書(shū)比我的筆頭強(qiáng)多了。現(xiàn)在來(lái)分析這個(gè)判斷式:這是一個(gè)“與”運(yùn)算。第一個(gè)判斷式 s ,因?yàn)樗淖址椭挡粸?nbsp;"" ,在JS當(dāng)然認(rèn)為它等同于 true,第二個(gè)判斷式是 s==true,顯然這個(gè)不相等,值為 false,因?yàn)槭恰芭c”運(yùn)算,當(dāng)然整個(gè)條件判斷式的結(jié)果是 false,所以不會(huì)運(yùn)行 alert()。

    第三,我這里說(shuō)說(shuō)幾個(gè)很特殊的條件判斷。在沒(méi)有任何聲明(var)和賦值的情況下,直接拿一個(gè)變量來(lái)判斷JS會(huì)拋出一個(gè)變量未定義的錯(cuò)誤出來(lái)。比如:

if (ss) alert("條件判斷結(jié)果為 true!");

運(yùn)行這句代碼就會(huì)出錯(cuò)。因?yàn)檫@個(gè)變量 ss 從未被聲明賦值過(guò),這種情況不等同于上述的 null "" undefined。這種情況一般會(huì)發(fā)生在什么地方呢?一是自己寫(xiě)代碼不小心未聲明,二就是對(duì)網(wǎng)頁(yè)里沒(méi)有的控件進(jìn)行操作直接用ID來(lái)操作的時(shí)候,比如 if (InputId.value!="") ... ,若是網(wǎng)頁(yè)里根本就沒(méi)有 id="InputId" 的文本框或者在執(zhí)行這句腳本操作的時(shí)候這個(gè)文本框還沒(méi)有被瀏覽器加載,那也就拋出變量未定義的錯(cuò)誤。

    結(jié)果的辦法是:第一種情況用 typeof 判斷。if (typeof(ss)=="undefined") alert("變量未定義");  ,第二種情況則不要直接使用ID來(lái)引用對(duì)象而使用標(biāo)準(zhǔn)的對(duì)象引用。例:

var e = document.getElementById("InputId");  //IE里以前是用 document.all.InputId
if (e && e.value!="") ;//...... 

這樣就不會(huì)出這種錯(cuò)誤了。

那么就上面這句代碼有人會(huì)說(shuō)一定要這樣寫(xiě)呢,為什么不直接 

if(document.getElementById("InputId").value != "") ;//....

這樣的代碼不是更精練嗎?城然代碼是精簡(jiǎn)了,但錯(cuò)誤也來(lái)了。只要網(wǎng)頁(yè)里沒(méi)有這個(gè)對(duì)象或者這個(gè)對(duì)象在腳本執(zhí)行的時(shí)候還未被加載到,就會(huì)報(bào)錯(cuò)。原來(lái)是 document.getElementById("InputId") 返回了 null 值,而 null 顯然是沒(méi)有 value 屬性的,而我那句代碼也用到了 e.value 來(lái)取屬性但就沒(méi)有報(bào)錯(cuò),原因在于C系列的語(yǔ)言在多個(gè)條件式里的另一外屬性:多個(gè)條件判斷式組合判斷時(shí),先看第一個(gè)條件式,若已經(jīng)符合條件時(shí),就不會(huì)再去判斷第二個(gè)判斷式;也就是在第一個(gè)條件判斷式未達(dá)到標(biāo)準(zhǔn)時(shí)再會(huì)去判斷第二個(gè)判斷式,依此類推直至最后。if (e && e.value!="") 是兩個(gè)判斷式的組合判斷,這是一個(gè)“與”運(yùn)算,只要一個(gè)判斷式為 false 則整個(gè)值都為 false。第一個(gè)判斷式 e 由于不存在或者未加載到返回了 null,而在JS里 null 就等同于 false ,這樣不用后面的判斷也可得到整個(gè)組合判斷的結(jié)果是 false 了,所以系統(tǒng)就不會(huì)再去判斷后面的那句 e.value 了。這點(diǎn)與B系列語(yǔ)言不同,尤其要注意。在B語(yǔ)言中 if e and e.value!="" then 這樣的語(yǔ)句是先把所有的判斷式都運(yùn)算一遍后最后再做組合的“與”運(yùn)算。所以這句代碼在JS里是正確的,若放在VBS里就不一定正確了。

    好了,肚里的貨不多,文筆又比較爛,就寫(xiě)這么多了,望大家多多指正!

JavaScript技術(shù)javascript里的條件判斷,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 恋夜秀场支持安卓版全部视频国产 | 日韩精品无码免费专区 | 无码成人AAAAA毛片含羞草 | 耻辱の奴隷淑女中文字幕 | 97无码欧美熟妇人妻蜜 | 亚洲色图在线视频 | 欧美成人亚洲高清在线观看 | 俄罗斯mm | 亚洲spank男男实践网站 | 亚洲AV人无码综合在线观看蜜桃 | 免费国产成人手机在线观看 | 国产精品久久毛片A片软件爽爽 | 国产在线高清亚洲精品一区 | 爆操大胸美女 | 脱女学小内内摸出水网站免费 | 国产高清视频a在线大全 | 51久久成人国产精品麻豆 | 内射一区二区精品视频在线观看 | 性生大片免费看 | 午夜视频在线网站 | 久久精品国产免费播高清无卡 | 亚洲日韩国产成网站在线 | 久久99精品国产免费观看 | 长篇高h肉爽文丝袜 | 国产扒开美女双腿屁股流白浆 | 国产日韩亚洲专区无码 | 么公在浴室了我的奶 | 麻豆啊传媒app黄版破解免费 | 亚洲欧美一区二区三区导航 | 99久久亚洲精品日本无码 | 国产午夜精品AV一区二区麻豆 | 熟妇少妇任你躁在线无码 | 一个人的HD高清在线观看 | 2022久久精品国产色蜜蜜麻豆 | 精品久久久久久无码人妻国产馆 | adc影院在线| 国产一区内射最近更新 | 国产精品自在拍在线播放 | 亚洲精品国产第一区第二区 | 国产精品69人妻无码久久久 | 国产超碰AV人人做人人爽 |