现在有一个对象a,我们不知道对象a中的b属性(b也是一个对象)有没有值,也不知道b中有没有一个叫名p的成员。

原型如是:

       a = {


b:{

......

}

}



现在我们不能确定b中状态,但却要修改b中的成员p的值。如果使用传统方法我们可以这样做:



if(!a.b){

a.b={

p:'i am p'

}

}else{

a.b['p'] = 'i am p'

}



通过上面的代码我们可以做两件事:第一,检测a中有没有,如果没有就创建。第二,如果a.b是存在的那我们要更新a.b.p的值。那么有没有更简便的写法呢?答案是有的:



( a.b = a.b || {} )['p'] = 'i am p'



如果你不知道这句话为什么等同于前面第二段代码,那建议你弄清楚 = 的运算过程。=是赋值运算,过程是将=右边的内容赋给左边。表达式返回值也等于=号的右边。