是在第一個例子比 if (mainobj.object_1 == undefined){ mainobj.object_1 = []; }
的Javascript定義的對象檢查
mainobj.object_1 = mainobj.object_1 || []
更好它似乎JavaScript的將它的值重新分配給自己,但也許不會。
此外,第一個例子將自己的價值重新分配給自己或不做任何有價值的東西?
是在第一個例子比 if (mainobj.object_1 == undefined){ mainobj.object_1 = []; }
的Javascript定義的對象檢查
mainobj.object_1 = mainobj.object_1 || []
更好它似乎JavaScript的將它的值重新分配給自己,但也許不會。
此外,第一個例子將自己的價值重新分配給自己或不做任何有價值的東西?
最好將
if(typeof mainobj.object_1 === "undefined"){
mainobj.object_1 = [];
}
但是,如果你想檢查空過,那麼你必須添加空檢查爲好。
第一種方法可能會導致不希望的事情。考慮下面的例子
var mainobj = {};
mainobj.object_1 = false;
mainobj.object_1 = mainobj.object_1 || [];
alert(mainobj.object_1);
在這裏警報讀取空而不是false。請記住0
,false
,null
,0 undefined
,""
(空字符串),NaN
在Javascript中都是錯誤的。
此外,你需要記住,undefined
是不保留字在JavaScript
兩者都是正確的。第一個是整潔的。 但是在第二個中,您應該使用===
而不是==
來檢查類型。
爲什麼不扔一個'typeof'檢查來檢查類型? 'if(typeof mainobj.object_1 ==「undefined」)' – 2013-03-11 18:29:48
你不應該使用'===',你試圖檢查一個錯誤的值,而不是特定的'undefined',這是第一個例子。 – MattDiamant 2013-03-11 18:30:22
@RobinvanBaalen實際上,當'mainobj'被定義時它沒有任何區別。 – VisioN 2013-03-11 18:30:35
如果您想檢查它是否未定義,您必須使用第二個示例,因爲如果對象爲null,空字符串,零,未定義,NaN或false,則JavaScript返回false。
所以它關於你的代碼到底需要什麼。
您會推薦什麼樣的解決方案1? – hop 2013-03-11 18:41:36
他們做幾乎相同的事情。
mainobj.object_1 = mainobj.object_1 || []
能不能看看mainobj.object_1
,看看它不是undefined
,而不是null
,否則它分配[]
;
if (mainobj.object_1 == undefined){ mainobj.object_1 = []; }
這將其與undefined
比較之前做強制類型轉換到mainobj.object_1
。通常更好地使用===
嚴格比較,而不是==
,它更快,更明確。而如果你使用嚴格的比較,你必須調整自己的聲明:
if (mainobj.object_1 === undefined || mainobj.object_1 === null){ mainobj.object_1 = []; }
至於編碼的喜好,開發商寧願較短的形式mainobj.object_1 = mainobj.object_1 || [];
,因爲它的簡潔和易於閱讀。
如果mainobj.object_1 == false,會發生什麼情況? – hop 2013-03-11 18:39:25
@hop如果您必須檢查每種數據類型並查看是否有其他人與您的對象混淆,那麼還有更重要的問題需要處理。 – sweetamylase 2013-03-11 18:44:06
但是,絕對不是一個忽略的問題 – hop 2013-03-11 18:45:17
我會去的第一個選項,因爲它是短,看起來更好。 – VisioN 2013-03-11 18:27:00
您提供的兩個示例並不完全相同。爲了簡潔起見,首先是首選。 – zzzzBov 2013-03-11 18:27:02
第一個選項總是不正確 – hop 2013-03-11 18:36:39