天天看點

js對象中的屬性檢測

最近項目裡遇到一個問題,頁面加載時候對window對象進行渲染,渲染過程中對window增加了一個對象obj,之後又加載一個檔案,向obj增加了一個屬性para,但這個過程是異步的。

之後需要檢測window是否有obj對象,而obj對象是否有para屬性。由于是異步的。執行這個操作時候可能并沒有渲染至para上,這時候需要使用if..else..進行另一套操作。

這時候遇到一個問題,如何判斷window對象是否有obj對象,且obj對象是否有para屬性?

  1. 之前使用的是'obj' in window 這樣的判斷。但帶我的大大說這樣對系統性能并不是很好,希望我能用另外的方式實作。
  2. 查閱後定位在hasOwnProperty操作上,使用window.hasOwnProperty('obj') && window.obj.hasOwnProperty('para'),進行了判定。

    但這種方法有一個問題:隻能判斷自有屬性是否存在,不能判斷繼承屬性。

  3. 使用undefined判斷:window.obj !== undefined;

    使用這方法可以判斷自有屬性和繼承屬性,但當obj值為undefined時候,失效。

  4. 使用條件語句直接判斷if(!!window.obj.para).

    但使用這種方法,如果屬性值為undefined,null,"",0,時候,傳回false

項目中大大讓我采用了

typeof(window.obj) !== 'undefined' && typeof(window.obj.para) !== 'undefined'

的方式進行判定。