我正在浏览BackboneJS源代码并且无法确定此行options || (options = {});
的作用,因为没有赋值给变量。
以下是BackboneJS的代码片段。
var Model = Backbone.Model = function(attributes, options) {
var attrs = attributes || {};
options || (options = {});
this.cid = _.uniqueId('c');
this.attributes = {};
if (options.collection) this.collection = options.collection;
if (options.parse) attrs = this.parse(attrs, options) || {};
attrs = _.defaults({}, attrs, _.result(this, 'defaults'));
this.set(attrs, options);
this.changed = {};
this.initialize.apply(this, arguments);
};
答案 0 :(得分:2)
但 是一个分配:
options || (options = {});
// ^^^^^^^^^^^^ Right there
因此如果options
为假,则options = { }
部分将被执行。由于options
被指定为一个对象或undefined
(即根本没有传递),一个对象是真实的,undefined
是假的,如果options
该表达式将不执行任何操作如果未传递options = { }
,则指定并设置options
。这种表达只是一种不同的写作方式:
if(!options)
options = { };
请记住,表达式也符合JavaScript中的语句,因此您可以这样说:
1 + 2;
'where is' + ' pancakes house?';
在JavaScript中;这两个人什么都不做,但options || (options = { })
有一个副作用。据推测,options || (options = { })
可以唤起许多语言中提供的options ||= { }
语法 - 但JavaScript中的不是 - 因此Backbone作者可以轻松阅读这些符号。