我看到的问题是关于我在下面列出的代码中的最后一个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();
}
};