Javascript (backbone) - 什么时候 false 是一个空对象?

Javascript (backbone) - when is false an empty object?

我正在尝试在新的 Assemble.io 项目中重新利用一些示例 Javascript 代码。我有一个 main.js 文件,它创建了一个 Backbone 视图的实例。视图的初始化函数的第一个参数的值在 main.js 中确定为布尔值,如下所示:

new MyView(typeof myFunc != "undefined", anotherVar);

在原始示例中(我 运行 作为 Apache 中的虚拟主机)这一切的行为都非常容易理解。在我的新项目(这是一个 Assemble.io 站点,通过 grnt-contrib-connect 提供服务)中,如果第一个参数评估为 false,MyView.initialize 接收到的是一个空对象,{} .即使我删除了测试,我也会看到这个,然后这样做:

new MyView(false, anotherVar);

真值(或其他任何值,如字符串、数组等)按预期传递。

这对某人有意义吗?

来自 Backbone source:

  var View = Backbone.View = function(options) {
    this.cid = _.uniqueId('view');
    options || (options = {});
    _.extend(this, _.pick(options, viewOptions));
    this._ensureElement();
    this.initialize.apply(this, arguments);
  };

如果构造函数的第一个参数的计算结果为 false,则在调用 initialize 之前将其替换为空对象。

编辑:

重新分配 options 改变了 arguments 对象有点奇怪,但是使用以下函数进行测试证实了这一点:

  function checker (options) {
    console.log(arguments);
    options || (options = {});
    console.log(arguments);
  }