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

javascript里的條件判斷

JavaScript 是一種可以在瀏覽器中運行的腳本語言,是一種弱語言(相對于C,C#,Java而言),只要是計算機語言就會使用到條件判斷式,而JavaScript作為一種“弱”語言,它的條件判斷常常令人困惑不解,特別是有其它強語言編程經歷的人來說,更是不可理喻!高手和無惑的人別取笑,我自己也曾經有一段時間郁悶過。先寫一個例子吧:

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

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

    我測試統計了一下:在 JavaScript 里,不為空 "" 的字符串、不為 0 的數字、不為 null 的對象、不為 undefined 的對象屬性、布爾型 true,單獨作為判斷式里的一個表達式時 JavaScript 通通認定為真(true),反之則為假(false)。

    原因為是JS腳本沒有強變量類型,你前一句賦值 var s = "meizz"; 后一句你甚至馬上可以寫成 s = function(){}; ,中間沒有任何的類型轉換,而這些寫法在強語言里是不可思議的,甚至是大逆不道的(根本就不支持這種語法),但在JS腳本里卻是那么的自然。原因就是沒有強制變量類型, 變量類型是動態的,也就是說變量本身是沒有類型的,變量的值是有類型的。呵呵,這里扯到其它模塊去了,嗯,關于變量類型我另外再寫文章討論吧。

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

    現在再來討論上面的那幾句代碼的運行結果,多個條件判斷式的結果合成運行只有“與”和“或”,到于“非”因為它是一元運行符,只針對單個值,比如 if (!s) ... 至于條件式不只一個的時候條件式的結果只有與和或的運行。與(&&),或(||)。上面的那句條件式:if (s && s==true) 就是兩個條件式的合成判斷。至于與運算(只要一個值為false則值為false)或運算(只要一個值為true則值為true)這些運算細節我就不多說了,教科書比我的筆頭強多了。現在來分析這個判斷式:這是一個“與”運算。第一個判斷式 s ,因為它的字符型值不為 "" ,在JS當然認為它等同于 true,第二個判斷式是 s==true,顯然這個不相等,值為 false,因為是“與”運算,當然整個條件判斷式的結果是 false,所以不會運行 alert()。

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

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

運行這句代碼就會出錯。因為這個變量 ss 從未被聲明賦值過,這種情況不等同于上述的 null "" undefined。這種情況一般會發生在什么地方呢?一是自己寫代碼不小心未聲明,二就是對網頁里沒有的控件進行操作直接用ID來操作的時候,比如 if (InputId.value!="") ... ,若是網頁里根本就沒有 id="InputId" 的文本框或者在執行這句腳本操作的時候這個文本框還沒有被瀏覽器加載,那也就拋出變量未定義的錯誤。

    結果的辦法是:第一種情況用 typeof 判斷。if (typeof(ss)=="undefined") alert("變量未定義");  ,第二種情況則不要直接使用ID來引用對象而使用標準的對象引用。例:

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

這樣就不會出這種錯誤了。

那么就上面這句代碼有人會說一定要這樣寫呢,為什么不直接 

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

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

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

JavaScript技術javascript里的條件判斷,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 2022一本久道久久综合狂躁 | 不卡人妻无码AV中文系列APP | 国产精品色无码AV在线观看 | 少妇厨房愉情理9伦片视频 少妇被躁爽到高潮无码久久 | 18videosex性欧美黑色 | 午夜dj免费中文字幕 | 亚洲中文字幕国产综合 | 久草色在线 | 草柳最新地址 | 视频一区视频二区ae86 | 三级电影免费看 | 18禁黄无遮挡禁游戏在线下载 | 97超碰97资源在线观看 | 麻豆XXXX乱女少妇精品-百度 | 麻豆传煤网站网址入口在线下载 | 在线A亚洲老鸭窝天堂AV高清 | 芳草地在线观看免费观看 | 99re久久热在线播放快 | 快播性爱电影 | 欧美成人一区二免费视频 | 国产VA精品午夜福利视频 | 欧美黑大炮18p | 婷婷四房播客五月天 | 亚洲AV午夜福利精品香蕉麻豆 | 99久久伊人一区二区yy5099 | 午夜宅宅伦电影网 | 暖暖视频免费观看社区 | 神马电影院午夜神福利在线观看 | xxx免费观看| 精品AV综合导航 | 欧美日韩另类在线观看视频 | 色男人的天堂久久综合 | 99欧美精品 | 久久精品国产亚洲AV蜜臀 | 甜性涩爱bt下载 | 秋霞电影院兔费理论84MB | 中文字幕视频在线免费观看 | 久久涩视频 | 日本护士在线观看 | 一级黄色香蕉视频 | 亚洲视频无码中字在线 |