BackboneJS:什么是选项|| (options = {});在Backbone源代码中

时间:2014-03-07 05:53:13

标签: javascript backbone.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);
  };

1 个答案:

答案 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作者可以轻松阅读这些符号。