今天在看一個動態web表單設計器的時候發現項目中的 一個寫法 !v 這是什麼寫法?不過可以肯定的是,這是一種判斷變數值的方式,看樣子應該是非類型判斷,會不會是判斷變數v是否為0,如果不為0就給變數v賦值0。 帶著這個疑問,我馬上動手敲了幾行js印證我的猜想 1 var num = 0; 2 docu ...
今天在看一個動態web表單設計器的時候發現項目中的 一個寫法
1 function sum_total(v){ 2 if (!v) { 3 v= 0; 4 } 5 }!v 這是什麼寫法?不過可以肯定的是,這是一種判斷變數值的方式,看樣子應該是非類型判斷,會不會是判斷變數v是否為0,如果不為0就給變數v賦值0。 帶著這個疑問,我馬上動手敲了幾行js印證我的猜想
1 var num = 0; 2 document.write("num=" + num + "<br/>"); 3 if (num) { 4 document.write("num不為0<br/>"); 5 } else { 6 document.write("num為0<br/>"); 7 }
我把num的值又改為了-1和1,對比結果為
那麼得出結論,變數類型為int:當變數值 = 0時,返回值為false;當變數值 < 0或變數值 > 0時,返回值為true(那表單設計器中的代碼 if (!v) v= 0; 寫法就是多此一舉了,當v = 0時,又給v賦值0,哈哈哈哈哈~被我給發現了~) 感謝@mgso的提醒~
@mgso
哥,那不是多此一舉喲
如果v為null,undefinde,'',0...結果都是false
這裡if(!v)的意思是:
如果v值沒有傳過來,設置v的值為0.等價於:
v || 0
嗯,驗證了int類型的變數,那麼再測試一下string類型的變數
1 var str = ""; 2 document.write("<br/>str=" + str + "<br/>"); 3 if (str) { 4 document.write("str有值<br/>"); 5 } else { 6 document.write("str為空<br/>"); 7 } 8 str = null; 9 //... 10 str = undefined; 11 //... 12 str = "Hello World!"; 13 //...
執行結果為
那麼得出結論,變數類型為string:當變數值 = "",變數值 = null,變數值 = undefined時,返回值為false,當變數值 = "xxx"時,返回值為true————————————————————華麗的分割線————————————————————
哈哈哈,有了這種寫法,以後判斷 數值是否為0 和 字元串值是否為空 就不用寫成 if (num === 0) 或者 if (str === "" || str === undefined) 了!
1 if (str) { 2 // 如果str不為空的操作 3 } 4 if (num) { 5 // 如果num不為0的操作 6 }