Uglifier是不是弄坏了我的睡衣

Is Uglifier breaking my js?

本文关键字:我的 弄坏了 是不是 Uglifier      更新时间:2024-06-13

我正在使用rails、uglifier,并且刚刚开始使用coffeescript。我处理ajax完成的coffee脚本是:

handleAjaxComplete = (xhr, response, status) ->
    myFeatherBox.close() if myFeatherBox?
    if $(xhr.target).hasClass "crud_create"
        #creation button hit
        myFeatherBox = $.featherlight response.responseText, afterOpen: ->
            $('form#frm_create').validate()
            $('#frm_create input[type!=hidden]').first().focus()
            return
    else #etc.

这变成了以下javascript:

handleAjaxComplete = function(xhr, response, status) {
  var new_aka_song_id;
  if (myFeatherBox != null) {
    myFeatherBox.close();
  }
  if ($(xhr.target).hasClass("crud_create")) {
    myFeatherBox = $.featherlight(response.responseText, {
      afterOpen: function() {
        $('form#frm_create').validate();
        $('#frm_create input[type!=hidden]').first().focus();
      }
    });
  } else //etc.

但当我打开托管页面(它在heroku上)时,myFeatherBox.close()似乎没有运行。我检查了放大的代码,它似乎变成了:

a=function(t,s) {
var o;
if(null!=h&&h.close(),$(t.target).hasClass("crud_create"))
    h=$.featherlight(s.responseText,{
        afterOpen:function(){
            $("form#frm_create").validate(),
            $("#frm_create input[type!=hidden]").first().focus()
        }
    });
else //etc.

(我在不重要的地方添加了一些空白,使其可读性更强)。

我关心的是未经验证的代码第三行的条件。我认为这是在破坏我想要做的事情,这是对的吗?如果是这样的话,我该如何修改我的咖啡脚本,让丑女演奏得很好?

a, b 

在本文中,是一个其值为b的值的表达式(请参见逗号运算符)。这就是为什么放大测试

if(null!=h&&h.close(),$(t.target).hasClass("crud_create"))

与相同

null!=h && h.close();
if ($(t.target).hasClass("crud_create"))

由于&&的短路行为,其等效于

if (null!=h) h.close();
if ($(t.target).hasClass("crud_create"))

因此,这种丑化似乎没有任何问题。