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

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

时间: 2024-12-28 21:34:13

js对象中的属性检测的相关文章

js对象字面量属性间相互访问的问题 和 这个问题与执行环境的关系

对象字面量属性间无法相互访问的问题: 我曾经在定义一个对象时, 并出于复用性的考虑试图复用某些属性: // test 1 var person = { firstName : "Bill", lastName : "Gates", fullName : firstName + " " + lastName // 这里报错 } alert(person.firstName); alert(person.lastName); alert(person

js对象可扩展性和属性的四个特性(下)

# js对象可扩展性和属性的四个特性(下) 一.前言 再次花时间回顾一下基础,毕竟要想楼建的好,地基就要牢固,嘻嘻! 在开始之前需要具备对prototype.__proto__.constructor有一定得了解,可以看看我之前写的一篇文章=>通道 之前的用户管理系统已经差不多了,顺便加了个socket聊天的,但是由于做java后台的哪个朋友节奏跟不上来,所以即时聊天的后台就是node+socket-io写的,由于用户列表也涉及比较多的用户隐私问题,所以我设置了页面权限和接口权限,然后下面开放的

JS对象中的原型

对象的原型:每个对象都连接一个原型对象,并且它可以从中继承属性.所有通过对象字面量创建的对象都连接到object.prototype.当你创建一个新对象时,你可以选择某个对象作为它的原型.原型连接在更新时不起作用.当我们对某个对象作出改变时,不会触及该对象的原型.原型连接只有在检索值的时候才被用到.如果我们尝试去获取对象的某个属性值,但该对象没有此属性名,那么JS会试着从原型对象中获取属性值,如果那个原型对象也没有该属性,那么再从它的原型中找,以此类推,直到该过程最后到达终点Object.pro

js对象数组按属性快速排序

前一篇<关于selector性能比赛>中提到,目测觉得在$("div,p,a")这样有逗号时,sizzle耗时异常(600多个元素,花了200ms),说是它可能没有优化ie下的排序.按所推荐的程序在IE下跑了下,的确,排序耗时很小. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 /* * 快速排序,按某个属性,或按“获取排序

spring -mvc 将对象封装json返回时删除掉对象中的属性注解方式

spring -mvc 将对象封装json返回时删除掉对象中的属性注解方式 在类名,接口头上注解使用在 @JsonIgnoreProperties(value={"comid"}) //希望动态过滤掉的属性 例 @JsonIgnoreProperties(value={"comid"}) public interface 接口名称{ } @JsonIgnoreProperties(value={"comid"}) public class 类名{

spring data mongodb中,如果对象中的属性不想加入到数据库字段中

spring data mongodb中,如果对象中的属性不想加入到数据库字段中,可加@Transient注解,声明为透明属性 spring data mongodb 官网帮助文档 http://www.boyunjian.com/javadoc/org.springframework.data/spring-data-mongodb/1.2.3.RELEASE/_/org/springframework/data/mongodb/core/query/Criteria.html#all(jav

访问对象中的属性与方法

访问对象中的属性: 引用名称.属性名称 访问对象中的方法: 引用名称.方法名称() 1 //第一步:编写类 2 class Student{ 3 //第二步:编写属性也叫做成员变量或实例(对象)变量 4 String name; //默认值为null 5 int age; //默认值为0 6 char sex; //默认值为\u0000 7 String address; //默认值为null 8 9 //第三步:编写方法 10 public void study(){ 11 System.ou

js 对象数组根据对象中的属性排序

function createComparisonFunction(propertyName){ return function(object1,object2){ var value1 = object1[propertyName]; var value2 = object2[propertyName]; if(value1 < value2){ return -1; }else if(value1 > value2){ return 1; }else{ return 0; } }; };

js对象中属性调用.和[] 两种方式的区别

JS 调用属性一般有两种方法——点和中括号的方法. 标准格式是对象.属性(不带双引号),注意一点的是:js对象的属性,key标准是不用加引号的,加也可以,特别的情况必须加,如果key数字啊,表达式啊等等. 加引号是为了将其视为整体,认识一点:从对象角度,属性是不加引号的,如name,"name"这是啥,属性不可能是“name”,所以即使加了双引号,对象调用时还是要去掉引号的 例如 使用.方法 var obj = { name: "cedric" } console.