17 十二月 2008 @ 7:18 下午 
javascript是一個弱型態的語言,不像JAVA、C#等對變數型態有非常嚴謹的定義,而且一般在編譯階段就會發現型態的錯誤,讓開發者避免一些不 必要的型態錯誤。而Javascript為script語言,因此必須在執行階段才會知道錯誤,雖然目前有一些工具可以輔助你開發時幫你檢查是否有 javascript型態錯誤或者語法錯誤,例如Douglas Crockford的JSLint,就是一個非常棒的Javscript verify tool, 雖然你可以依靠這些工具輔助你 在撰寫Javascript時避免一些不必要的錯誤,但是若你打開一些Framework的原始碼,你會發現一大堆利用javascript弱型態的特性 簡化程式碼的小技巧,當然,你可以選擇不使用者些技巧,但是你卻不能不瞭解有這些特性的存在。 在Javascript中,所有的變數型態都有Boolean值,以下列出所有型態所對應的Boolean值。
Type True False
String 非空字串 空字串
Number 非0 0, NaN
Object Object -
Array Array -
undefined - undefined
既然每種型態都有Boolean值,便可以直接寫在if等判斷式裡頭,例如:
var str = '';
if(!str)
alert('empty');
需要注意的是,0和空字串還有undefined都是false,因此若你的判斷式必須判斷明確的型態時,只判斷Boolean值就會出現奇怪的問題,例如:
function test(idx){
if(!idx)
alert('empty');
}
test();//alert('empty');
test(0);//alert('empty');
test("");//alert('empty');
在這個function test中,執行三個不同的輸入都會出現相同的結果,當你需要判斷明確的型態時,要使用「===」 或是「!==」來判斷,例如:
function test2(idx){
if(typeof idx === 'undefined')
alert('undefined');
else if(idx === 0)
alert('zero');
else if(idx === '')
alert('empty');
}
test();//alert('undefined');
test(0);//alert('zero');
test("");//alert('empty');
轉 型成Boolean是一個很好用的技巧,其中最常用在對於arguments的判斷,透過對輸入值的判斷來做函式相對應的處理可以讓函式作到更彈性的運 用。例如在jQuery中,$(‘.test’).html();代表取得該element的innerHTML; 而$(‘.test’).html("This is my string");就代表設置該element的innerHTML。 如果你習慣了Java等語言,你可能會覺得「靠~這也太爛了吧,這樣根本就是亂寫,會發生什麼錯誤都不知道XD」,不過這是缺點也是優點,善用這個缺點, 反而變成Javascript的優點,當你寫多了Javascript之後,回去寫Java時可能又會覺得「靠~這麼嚴格~煩死了!」。
Posted By: BLACKBING
Last Edit: 17 十二月 2008 @ 07:18 下午

EmailPermalink
Tags


 

Responses to this post » (3 Total)

 
  1. kate 說道:

    靠!真是清楚~(我沒形象了~)
    有好玩的fu~~~~~~

  2. BLACKBING 說道:

    是阿,這是一個很好用的小技巧;)

  3. [...] Programming Language) 在 new Object() vs {} and new Array() vs [] 效能比較BLACKBING 在 Javascript 型態BLACKBING 在 Javascript練功房(序)kate 在 Javascript 型態kate 在 [...]

Post a Comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


 Last 50 Posts
 Back
Change Theme...
  • Users » 28
  • Posts/Pages » 64
  • Comments » 35
Change Theme...
  • VoidVoid « Default
  • LifeLife
  • EarthEarth
  • WindWind
  • WaterWater
  • FireFire
  • LightLight

About Me



    No Child Pages.

留言板



    No Child Pages.

Album



    No Child Pages.