Pages - Menu

2016年7月2日 星期六

[程式開發] Javascript undefined 和 null 的差別 使用方法

1. undefined
當你宣告一個變數 但不給他任何值 or 不初始化牠(new) 那牠就會是undefined

var TestVar;
 alert(TestVar); //shows undefined
 alert(typeof TestVar); //shows undefined

此時要如何判斷是不是undefined 就要寫

if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below

註1:JS中 typeof 會有六種值 "number"、"string"、"boolean"、"object"、"function"、"undefined"
註2:第三種判斷方式 當 a 是 null 也也會是true ,因為

null == undefined // true
2. null
null 是一種型態(type) 牠可以賦值給一個變數 表示"沒有值"

var TestVar = null;
 alert(TestVar); //shows null
 alert(typeof TestVar); //shows object
如何判斷是不是null呢 ?

if (a === null)
// or
if (a == null) // but see note below
第二種判斷方式 當 a 是 undefined也也會是true ,因為

null == undefined // true
3. === and !==  strict comparison operators
(1) number : 當數字大小一樣就會成立,其中 NaN 不等於任何東西(包括他自己 所以JS有一個 isNaN(x) 函數用來判斷x是否NotANumber 而不能用==或是===) ,另外+0 === -0
(2) Boolean: 只有兩種情況成立 true===true, false===false (Ex. (1+2)>0===(2+1)>0)
(3) String : 當同樣字符,長度,位置時才會成立
(4) objects : 當同樣指到同一個物件才會成立
(5) Null and Undefined types are == , (Null===Undefined) is false

另外與 loose(Abstract) comparison不同的是 Strict 不會做形態轉換,所以Strict會做形態比較
比如說 "1" == 1 is true , "1" === 1 is false
也就是==會做形態轉換(type coercion)強迫牠們兩個一樣 而 Strict會直接比較形態 不一樣type則false

4.一般都用 if(!somthing)
可以濾掉 空字串(""),null,undefined, false,0,NaN
if (!a) {
    // `a` is falsey, which includes `undefined` and `null`
    // (and `""`, and `0`, and `NaN`, and [of course] `false`)
}
因為DOM操作時(getElementById(), nextSibling(), childNodes[n], parentNode()),如果找不到Node就會回傳null (也就是說有定義,但用null表示沒有此Node)所以不需要特別做null與undefuned之間的差別判斷





沒有留言:

張貼留言