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);
}
我正在尝试在新的 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);
}