10/23/2013
5:50:00 PM 0

Javascript 判斷 property 是否存在

在 Javascript 常有人使用 if(car.engine) 來判斷是 property 是否存在, 雖然方便, 但會有出錯的風險, 因為在使用 if(car.engine) 時, 如果不是 boolean 時, Javascript 內部會做一個自動轉型的動作, 因此 if (car.engine) 就等於 if (Boolean(car.engine)),而 car.engine 是 undified 的狀況下, if 測試會回傳 fasle, 但是當 car.engine 其值為 null, fasle, 0, "" 也都會回傳 false

所以測試 property 是否存在, 比較正確的做法是使用 hasOwnProperty, 使用上要特別注意的是 hasOwnProperty 並不會到 prototype chain 去尋找, 只會檢查本身是否有定義 property
> var car = {};
undefined
> Boolean(car.engine);
false
> car.engine = "e1";
"e1"
> Boolean(car.engine);
true
> car.engine = 0;
0
> Boolean(car.engine);
false
> Boolean(null);
false
> Boolean(0);
false
> Boolean("");
false
> car.hasOwnProperty("engine");
true
> delete car.engine;
true
> car.hasOwnProperty("engine");
false

0 comments:

Post a Comment