在Backbone.fetch()中寻找一些代码的解释

时间:2014-02-20 14:50:37

标签: javascript backbone.js

我经常阅读源代码作为学习编程的好资源。我正在研究Backbone.Model的fetch()方法并且有了这个问题,我希望有人可以解释一下。

这是fetch()方法:

// ---------------------------------------------------------------------
// Fetch the model from the server. If the server's representation of the
// model differs from its current attributes, they will be overriden,
// triggering a `"change"` event.
fetch: function(options) {
  options = options ? _.clone(options) : {};
  if (options.parse === void 0) options.parse = true;
  var success = options.success;
  options.success = function(model, resp, options) {
    if (!model.set(model.parse(resp, options), options)) return false;
    if (success) success(model, resp, options);
  };
  return this.sync('read', this, options);
}

我的问题是,if条件 if (options.parse === void 0)... 的重点是什么? void 0 只是评估为“未定义”,所以这是测试属性是否未定义的简写?如果是这样,它是否比标准的 (typeof options.parse === 'undefined') 语句有任何优势,我发现它更具语义和可读性?

1 个答案:

答案 0 :(得分:0)

除了代码大小和性能之外,使用void 0还有另一个原因。某些浏览器允许为undefined分配其他值。这可能会导致代码以依赖于浏览器的方式被破坏。

请参阅:JavaScript `undefined` vs `void 0`