首页 新闻 会员 周边 捐助

javascript 写法问题

-2
[已解决问题] 解决于 2014-07-16 17:18
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 也同样会报错,也不是这种写法啊.

CallMeTommy的主页 CallMeTommy | 初学一级 | 园豆:70
提问于:2013-02-25 16:02
< >
分享
最佳答案
1

楼主给出的代码这么写是为了防止异常的产生。

 

参考语言规范:

一、  A && B的求值步骤

  1. 对A求值得到 引用lref
  2. 调用GetValue(lref)获取引用值lval
  3. 调用内部函数ToBoolean(lval),如果结果为false,返回 lval
  4. 对B求值得到 引用rref
  5. 返回GetValue(rref)

二、上述第3步中的ToBoolean()函数规范中如下面表格中的定义:

如果第一个操作数为null或者为undefined,那么第一个操作数的ToBoolean()操作结果就是false,

那么就不会继续对第二个操作数做求值操作了。

Argument TypeResult
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 TypeResult
Undefined Throw a TypeError exception.
Null Throw a TypeError exception.
Boolean Return
Number Return
String Return
Object Return
奖励园豆:5
pangdachong | 菜鸟二级 |园豆:274 | 2013-03-15 20:31
其他回答(3)
1

我的理解:

var st=this._getstore()这一行是尝试获得store

如果为空,或者浏览器不支持,st就是null

&&判断如果前面是false,后面应该不会去计算

所以如果st是null,浏览器就不会执行st.onstorage(key,callback)

飞来飞去 | 园豆:2057 (老鸟四级) | 2013-02-25 16:22
0
&&的用法就是:result1&&result2,result1如果false(javascript中的null、undefined等值),则result2就不会执行了!

补充:我看不懂楼主补充里面的意思…… 请细说,或者发代码
yevon | 园豆:306 (菜鸟二级) | 2013-02-25 17:55
0

这个是

if (st) {

    st.onstorage(key, callback)
}

的简写

掸尘 | 园豆:202 (菜鸟二级) | 2013-02-28 10:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册