最近项目里遇到一个问题,页面加载时候对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'

的方式进行判定。




参考:http://www.3lian.com/edu/2013/05-20/70754.html