[JavaScript] 判斷物件內是否有該屬性 hasOwnProperty() & 其他方法(更便利!)

(前情提要)
乾,在公司被唸說看不懂 ? 這寫法,我反問對方這要怎麼查,他說他不知道,且說不重要... 唉.. 最後我另外花時間找,並記錄下來好了...


(正式來)
有時 API 傳回來的資料,連那個 key 都沒有,render 就會出問題,那這時就得判斷該物件內是否存在該屬性,這就衍生出以下三種方法


一、hasOwnProperty()
二、? (???.... 是在問號三小... 你沒看錯.. 就是?...)
三、?? 結論 (這問號想逼使誰...


一、hasOwnProperty()

此方法即可判斷物件有無屬性存在,下方程式碼即在判斷 objA, objB 是否有 'chi' 這個 key

  1. const objA = {};
  2. const objB = { chi: 'chiValue' };
  3.  
  4. // 無印出
  5. if (objA.hasOwnProperty('chi')){
  6. console.log('objA.hawOwnProperty(chi): ', objA.hasOwnProperty('chi'));
  7. }
  8.  
  9. // 印出 objB.hawOwnProperty(chi): true
  10. if (objB.hasOwnProperty('chi')) {
  11. console.log('objB.hawOwnProperty(chi): ', objB.hasOwnProperty('chi'));
  12. }


二、?

此為 es2020 之方法,跟 '一、' 可以達到一樣效果,但更方便

  1. const objA = {};
  2. const objB = { chi: 'chiValue' };
  3.  
  4. // 印出 objA?.chi: undefined
  5. console.log( 'objA?.chi: ', objA?.chi );
  6.  
  7. // 印出 objB?.chi: chiValue
  8. console.log( 'objB?.chi: ', objB?.chi );


三、?? 結論

綜合上述兩種方法可以得到
一、 判斷完 true, false 後,有後續較多動作可使用 (執行 function 等
二、 判斷完 true, false 後,有後續單純動作可使用 (引用該屬性 value、賦值、render 等

下方為 '二、' 之完整寫法,即賦值給該屬性,避免 undefined 狀況(會導致錯誤)

此法在框架(如:react)下撰寫很好用,有機會在記錄一下

  1. const objA = {};
  2. const objB = { chi: 'chiValue' };
  3.  
  4. // 印出 objA?.chi: objA 沒有屬性
  5. console.log( 'objA?.chi: ', objA?.chi ?? 'objA 沒有 chi key' );
  6.  
  7. // 印出 objB?.chi: chiValue
  8. console.log( 'objB?.chi: ', objB?.chi ?? 'objB 沒有 chi key' );





留言

這個網誌中的熱門文章

[面試] 日月光 設備工程師

[日文] Google日文輸入法 簡單安裝說明

[Windows] 還我 win7 相片檢視器!!