Blackbing Playground

Javascript 型態

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等判斷式裡頭,例如:
[sourcecode language=”javascript”]
var str = ‘’;
if(!str)
alert(‘empty’);
[/sourcecode]
需要注意的是,0和空字串還有undefined都是false,因此若你的判斷式必須判斷明確的型態時,只判斷Boolean值就會出現奇怪的問題,例如:
[sourcecode language=”javascript”]
function test(idx){
if(!idx)
alert(‘empty’);
}
test();//alert(‘empty’);
test(0);//alert(‘empty’);
test(“”);//alert(‘empty’);
[/sourcecode]
在這個function test中,執行三個不同的輸入都會出現相同的結果,當你需要判斷明確的型態時,要使用「===」 或是「!==」來判斷,例如:
[sourcecode language=”javascript”]
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’);
[/sourcecode]
轉 型成Boolean是一個很好用的技巧,其中最常用在對於arguments的判斷,透過對輸入值的判斷來做函式相對應的處理可以讓函式作到更彈性的運 用。例如在jQuery中,$(‘.test’).html();代表取得該element的innerHTML; 而$(‘.test’).html(“This is my string”);就代表設置該element的innerHTML。

如果你習慣了Java等語言,你可能會覺得「靠~這也太爛了吧,這樣根本就是亂寫,會發生什麼錯誤都不知道XD」,不過這是缺點也是優點,善用這個缺點, 反而變成Javascript的優點,當你寫多了Javascript之後,回去寫Java時可能又會覺得「靠~這麼嚴格~煩死了!」。