骨干JS:什么是选项 ||(选项 = {});在主干源代码中



我正在浏览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);
};

但是里面有一个作业

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作者很容易阅读该符号。

最新更新