onstorage: function( key, callback ){ var st = this._getStore(); st && st.onstorage( key, callback ); },
st 是一个对象
st && st.onstorage( key, callback ); 这个写法着实没有明白有什么意义
如果st未定义的话 该报错还是报错,不明白..
不对啊
st.onstorage(key,callback);
就算st == null 也同样会报错,也不是这种写法啊.
楼主给出的代码这么写是为了防止异常的产生。
参考语言规范:
一、 A && B的求值步骤
二、上述第3步中的ToBoolean()函数规范中如下面表格中的定义:
如果第一个操作数为null或者为undefined,那么第一个操作数的ToBoolean()操作结果就是false,
那么就不会继续对第二个操作数做求值操作了。
Argument Type | Result |
---|---|
Undefined | false |
Null | false |
Boolean | The result equals the input argument (no conversion). |
Number | The result is false if the argument is +0, −0, or NaN; otherwise the result is true. |
String | The result is false if the argument is the empty String (its length is zero); otherwise the result is true. |
Object | true |
三、属性访问过程
对 obj.memberExpression 求值时,会调用内部方法CheckObjectCoercible()对obj的值进行校验,
CheckObjectCoercible()方法规范中的定义如下面表格,
如果obj为null或者undefined会抛出异常。
楼主给出的代码:
st && st.onstorage( key, callback );
先对 st 引用求值,如果st为undefined或者null,那么后面的st.onstorage(kye, callback)
就不会执行,防止产生异常。
Argument Type | Result |
---|---|
Undefined | Throw a TypeError exception. |
Null | Throw a TypeError exception. |
Boolean | Return |
Number | Return |
String | Return |
Object | Return |
我的理解:
var st=this._getstore()这一行是尝试获得store
如果为空,或者浏览器不支持,st就是null
&&判断如果前面是false,后面应该不会去计算
所以如果st是null,浏览器就不会执行st.onstorage(key,callback)
&&的用法就是:result1&&result2,result1如果false(javascript中的null、undefined等值),则result2就不会执行了!
补充:我看不懂楼主补充里面的意思…… 请细说,或者发代码
这个是
if (st) { st.onstorage(key, callback) }
的简写