區分underfined,null和NaN
先看看下面語句的運行結果:
1: var a;
2: alert(a); //顯示"undefined"
3: alert(typeof a); //顯示"undefined"
4: alert(b); //顯示"undefined"
以上說明a的值和類型都是'underfined'
1: var a = null;
2: alert(a); //顯示"null"
3: alert(typeof a); //顯示"object"
以上說明賦值為null的變數,值為null,類型為object
1: var b;
2: alert(null==b); // 顯示"true"
3: alert(null == undefined); //顯示"true "
以上說明undefined與null是相等的
1: var a1; //值和類型都是'underfined'
2: var a2 = null; //值為null,類型為object
3: alert(a1 == a2); //顯示"true"
以上兩例說明null和underfind很相似,至少undefined與null是相等的。
1: alert(100 + null); //顯示"100"
2: alert(100 + undefined); //顯示"NaN"
以上說明null和underfind雖然很相似,但還是有小區別的,嘿嘿!
underfined: 未知的變數名,或未賦值的變數。
null: 特殊的object
NaN: 特殊的number
1: alert(typeof(undefined));//顯示 'undefined'
2: alert(typeof(null));//顯示 'object'
3: alert(typeof(""));//顯示 'string'
4: alert(typeof(0));//顯示 'number'
5: alert(typeof(false));//顯示 'boolean'
6:
7: var a7 = NaN;
8: var a8 = undefined;
9:
10: alert(typeof a7); //顯示"number"
11: alert(typeof a8); //顯示"undefined"
以上說明NaN是一種特殊的number,和null、undefined都不會相等。
函數參數沒有和為空白的判斷
先看看下面的例子:
1: Test = function(a)
2: {
3: alert(typeof a);
4: }
5:
6: Test(); //沒傳參數,運行結果為"underfined"
7: Test(null); //傳了空參數,運行結果為"object", 如果要使用a.length等,就會報錯,因為對象為空白!
正確的參數檢查是:
1: Test = function(v)
2: {
3: if (v !== null && typeof v != 'undefined')
4: {
5: //使用v的屬性,例如v.length, v.property
6: // if (v.offsetX != undefined)
7: // if ( value == undefined )
8: }
9: }
當然,也可以用 if(v) 來簡化編碼,可以檢查v沒給定和v為null的情況,但要注意,如果傳入一個boolean的true或false,用if(v)就意味著 if( v == true),代碼邏輯可能不是你想要的結果!
- ExtJS+ASP.NET實現真實的進度條顯示伺服器端長時間操作的進度
- ExtJS+ASP.NET實現非同步Tree的節點搜尋和尋找下一個(FindNext)
- ExtJS+ASP.NET實現Tree節點的拖動(DragDrop)
- ExtJS+ASP.NET實現Grid到Tree的拖動(DragDrop)
- 使用YUI Compressor和DOS批處理指令碼壓縮JavaScript和CSS
- 最佳化JavaScript
- 區分JavaScript中的underfined,null和NaN