最近项目里遇到一个问题,页面加载时候对window对象进行渲染,渲染过程中对window增加了一个对象obj,之后又加载一个文件,向obj增加了一个属性para,但这个过程是异步的。
之后需要检测window是否有obj对象,而obj对象是否有para属性。由于是异步的。执行这个操作时候可能并没有渲染至para上,这时候需要使用if..else..进行另一套操作。
这时候遇到一个问题,如何判断window对象是否有obj对象,且obj对象是否有para属性?
之前使用的是'obj' in window 这样的判断。但带我的大大说这样对系统性能并不是很好,希望我能用另外的方式实现。
查阅后定位在hasOwnProperty操作上,使用window.hasOwnProperty('obj') && window.obj.hasOwnProperty('para'),进行了判定。
但这种方法有一个问题:只能判断自有属性是否存在,不能判断继承属性。
使用undefined判断:window.obj !== undefined;
使用这方法可以判断自有属性和继承属性,但当obj值为undefined时候,失效。
使用条件语句直接判断if(!!window.obj.para).
但使用这种方法,如果属性值为undefined,null,"",0,时候,返回false
项目中大大让我采用了
typeof(window.obj) !== 'undefined' && typeof(window.obj.para) !== 'undefined'
的方式进行判定。