CoffeeScript生成的If语句始终在Firefox中评估为TRUE

时间:2014-07-26 20:45:28

标签: javascript firefox if-statement coffeescript

我看到的问题是关于我在下面列出的代码中的最后一个if语句中执行if语句(if (this._sortDirection === 'desc') ...)。如果我在Chrome(36.0.1985.125)中运行此代码,事情就会发挥作用,但是当在Firefox(Mac OSX 10.9.4上的v31.0)中运行时,if语句会错误地评估条件并始终评估条件是true。我已经确认Chrome中没有这种情况,而且它确实与Firefox隔离。

作为调试的一部分,我在CoffeeScript代码中使用以下内容替换了@reverse() if @_sortDirection == 'desc'

`if (this._sortDirection === 'desc') {
  this.reverse();
}`

生成以下JavaScript:

if (this._sortDirection === 'desc') {
  this.reverse();
};

这样做之后,一切正常!我想知道是否存在Firefox处理不好的编码问题而Chrome是因为此代码(除了if语句之后的尾随;)相同但是一个有效但另一个不有。我甚至同时将内联代码和coffeescript代码放在CoffeeScript文件中,并验证一个是正确评估而另一个不是。

我显然已经解决了这个问题,但我想知道这是CoffeeScript或Firefox或我的代码的问题,如果这是我的代码的问题......我该如何解决它?显然,我的代码中有一大堆if语句并且使用这种解决方法并不是一个可行的解决方案,如果可以,我很乐意报告它是否已修复。我已经检查过CoffeeScript项目问题,但找不到任何与此问题类似的内容。

感谢您的帮助。


这是我的CoffeeScript代码(有关完整示例,请参阅my JSFiddle):

sortObjects: ->
  return unless @_sortOn?
  @sort (obj1, obj2) =>
    return  1 if obj1[@_sortOn] > obj2[@_sortOn]
    return -1 if obj1[@_sortOn] < obj2[@_sortOn]
    return  0
  @reverse() if @_sortDirection == 'desc' # This is the line that is causing problems
  return

以下是编译时生成的内容:

MyObject.prototype.sortObjects = function() {
  var _this = this;
  if (this._sortOn == null) {
    return;
  }
  this.sort(function(obj1, obj2) {
    if (obj1[_this._sortOn] > obj2[_this._sortOn]) {
      return 1;
    }
    if (obj1[_this._sortOn] < obj2[_this._sortOn]) {
      return -1;
    }
    return 0;
  });
  if (this._sortDirection === 'desc') { // This is the if-statement that is causing problems
    this.reverse();
  }
};

0 个答案:

没有答案