今天在学习Backbone源码的过程中读到这么一行代码:
this._events || (this._events = {});
然后我就很好奇这行代码会产生什么效果呢。Just do it,看看书上怎么写,顿时间就豁然开朗了。
与和或的真值表一般不难理解,但是很多时候我们开发过程中忽略了它们在不是布尔值的情况下遵循的规则(以下内容摘自《Javascript高级程序设计》)。
与的规则:
如果第一个操作是对象,则返回第二个操作数;
如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象;
如果两个操作数都是对象,则返回第二个操作数;
如果有一个操作数是null,则返回null;
如果有一个操作数是NaN,则返回Nan;
如果有一个操作数是undefined,则返回undefined。
与操作属于短路操作,如果第一个操作能够决定结果,就不会对第二个操作数求值了。即第一个操作数如果是fasle,那第二个操作数无论是什么值,都没有不可能是true了。
或的规则:
如果第一操作数是对象,则返回第一个操作数;
如果第一个操作数的求值结果为false,则返回第二个操作数;
如果两个操作数都是对象,则返回第一个操作数;
如果两个操作数都是null,则返回null;
如果两个操作数都是NaN,则返回NaN;
如果两个操作数都是undefined,则返回undefined;
或操作也属于短路操作,如果第一个操作能够决定结果,就不会对第二个操作数求值了。即第一个操作数如果是true,那第二个操作数无论是什么值,都没有是true了。