2016-08-18 54 views
0

我想問問哪一個是檢查ajax響應對象是否有屬性的正確方法。 我GOOGLE了,我發現有不同的方法來解決這個問題。這是檢查一個對象是否有屬性的最佳方法

例如:

if(ajaxResponse.hasOwnProperty('someProperty')){ 
     //do blah blah 
    } 

但也有其他方式可以肯定,例如:

if(typeof ajaxResponse.someProperty !== 'undefined')){ 
     //do blah blah 
    } 

所以我猜有一些優點和缺點你能請與我分享這些。

感謝

+0

hasOwnProperty更可接受我認爲 – chenop

+0

@chenop是對的,但你也可以這樣做:'var check = ajaxResponse.someProperty ||假;' – Derek

+0

@ chenop是的我也這麼認爲,但現在我在一個現有的項目中工作,他們使用第二種方式,但他們是聰明的人(當然),所以必須有一個原因,我不能看到此時此刻。 –

回答

-2

海事組織最簡單的方法:

if (ajaxResponse.someProperty){ 
//do stuff 
} 

除屬性是一個布爾值。然後,這不一定是想有大量的使用,你可以檢查這個方法的工作:)

+1

如果屬性是可能爲'0'的數字,則不起作用。或者可能是空字符串的字符串。或者可能爲空。或者可能存在「未定義」值。 – nnnnnn

0

比方說,你的目標是像下面的一個表現......

var person = { 
    name: "Nicholas" 
}; 

.. ..

方法1

person.hasOwnProperty("name") 

方法2

if ("name" in person){ 
    //property exists 
} 

方法3(不推薦)

//doesn't accurately test for existence 
if (person.name){ 
    //yay! property exists! 
} 

如果你只是要檢查屬性的存在,而不一定是他們的價值可能是,那麼你有兩個安全選項: hasOwnProperty()in運營商。如果只想檢測自己的屬性,應該使用hasOwnProperty()屬性方法。如果你想測試財產的存在和不關心,如果它是一個自己的屬性或對象屬性,然後in運算符是使用。如果阿賈克斯發生任何錯誤調用的響應直接進入錯誤

Source

+0

如果'person.name'爲falsey,則測試在'if(person.name){...}'上失敗。 –

+0

嗯... @NinaScholz你是對的。但是一天結束時,如果它的合同,寫作和訪問該對象的人知道該屬性的類型,那麼應該避免其布爾方法「方法3」。我已經爲此添加了類似的註釋。 – Yasser

+0

如果您正在爲*名稱*進行專門測試,則方法3可能是可以的,因爲即使該屬性存在爲空字符串,它可能在邏輯上等同於根本沒有名稱。但是OP的更通用的'someProperty'不適合。 – nnnnnn

0
$.ajax({ 
      type: "POST", 
      url: "frmSample.aspx/LoadSample", 
      data: '', 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (data) {  
       var jsonData = $.parseJSON(data.d);  
      }, 
      error: function OnError(xhr) {   
      } 
     }); 

假設,它不會去成功。如果空數據作爲結果傳遞,那麼data.d將是''。因此,在解析之前檢查data.d是否爲空是必要的。 如果結果是JSON,解析JSON如下

var jsonData = $.parseJSON(data.d); 

如果jsonData.length == 0,沒有屬性是有結果。在json響應中檢查屬性的方法有很多。這是簡單的一種方式。 直接檢查jsonData。 PropertyName!= null或不是。

相關問題