源: 因為js是弱語言, 就體現在js的變量是弱類型的, 在js中所有變量類型聲明都用var, 而在其他強類型語言中,如java/c,必須有強制類型轉換和類型檢查才能編譯通過等,
但是: 弱語言也有優勢: 起碼在寫js條件判斷表達式時可以直接用變量或者對象來判斷
來人, 上代碼:
// 代碼很簡潔, 先討論當變量a為不同值時的條件表達式結果 var a; // 只聲明變量 if (a) { alert('true'); } else { alert('false'); }
a的值 | 說明 | 表達式 if(a)的結果: |
var a; | 只聲明不賦值 | false |
a = '' || a = "" || a = null || a = undefined | 當a為空串或null或undefined時,評估結果為false | false |
a = 'somevalue', ... | 當為a賦值后, 評估結果true | |
a = ' ' || a = " " | * a為空格, 空格也是一個字符, 評估結果為true | |
a = 0 || a = 0.0 | * 當a為數值0或0.0,0.00,評估結果為false,其他數值一律為true | |
a = f | 當a為函數對象, 且不帶括號, 該函數對象定義了評估結果就為true,否則為false | |
a = f() | 當a為函數對象, 且帶括號, 則先執行函數, 按照函數的返回結果來作為評估結果, 若無返回結果: 則為false,因為默認返回undefined | |
a = obj.pro1, a = obj.f1() | 當a為對象的屬性或方法時, 按照a為單獨帶隊屬性或方法時的一樣進行評估 |