2013-03-11 64 views
2

是在第一個例子比 if (mainobj.object_1 == undefined){ mainobj.object_1 = []; }的Javascript定義的對象檢查

mainobj.object_1 = mainobj.object_1 || []

更好它似乎JavaScript的將它的值重新分配給自己,但也許不會。

此外,第一個例子將自己的價值重新分配給自己或不做任何有價值的東西?

+0

我會去的第一個選項,因爲它是短,看起來更好。 – VisioN 2013-03-11 18:27:00

+2

您提供的兩個示例並不完全相同。爲了簡潔起見,首先是首選。 – zzzzBov 2013-03-11 18:27:02

+0

第一個選項總是不正確 – hop 2013-03-11 18:36:39

回答

-1

最好將

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

+0

贊成票的理由將不勝感激!我真的不知道什麼是錯誤的答案 – hop 2013-03-11 18:43:58

+1

謝謝。我想你最好解釋一下。 – phpdev76 2013-03-11 20:42:03

-2

兩者都是正確的。第一個是整潔的。 但是在第二個中,您應該使用===而不是==來檢查類型。

+0

爲什麼不扔一個'typeof'檢查來檢查類型? 'if(typeof mainobj.object_1 ==「undefined」)' – 2013-03-11 18:29:48

+0

你不應該使用'===',你試圖檢查一個錯誤的值,而不是特定的'undefined',這是第一個例子。 – MattDiamant 2013-03-11 18:30:22

+0

@RobinvanBaalen實際上,當'mainobj'被定義時它沒有任何區別。 – VisioN 2013-03-11 18:30:35

0

如果您想檢查它是否未定義,您必須使用第二個示例,因爲如果對象爲null,空字符串,零,未定義,NaN或false,則JavaScript返回false。

所以它關於你的代碼到底需要什麼。

+0

您會推薦什麼樣的解決方案1? – hop 2013-03-11 18:41:36

-1

他們做幾乎相同的事情。

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 || [];,因爲它的簡潔和易於閱讀。

+0

如果mainobj.object_1 == false,會發生什麼情況? – hop 2013-03-11 18:39:25

+0

@hop如果您必須檢查每種數據類型並查看是否有其他人與您的對象混淆,那麼還有更重要的問題需要處理。 – sweetamylase 2013-03-11 18:44:06

+0

但是,絕對不是一個忽略的問題 – hop 2013-03-11 18:45:17