更正JavaScript IF其他语法

时间:2014-10-05 04:42:14

标签: javascript

我正在更新现有的JavaScript应用程序。此更新的一部分涉及更好地格式化和清理代码。

现在这是使用if()else语句而没有使用所有正确括号的函数之一...当人们使用这种简写方法时,我个人讨厌它,甚至更多他们混合使用它有时而不是其他人。下面的示例代码就是这种情况。

this.setFlags = function() {
    if (document.documentElement)
        this.dataCode = 3;
    else
    if (document.body && typeof document.body.scrollTop != 'undefined')
        this.dataCode = 2;
    else
    if (this.e && this.e.pageX != 'undefined')
        this.dataCode = 1;

    this.initialised = true;
}

老实说,我不知道如何正确地将括号添加到此功能中,下面是我所拥有的,但我认为它可能不正确。 JavaScript专家可以告诉我吗?

this.setFlags = function() {
    if (document.documentElement){
        this.dataCode = 3;
    }else{
        if (document.body && typeof document.body.scrollTop != 'undefined'){
            this.dataCode = 2;
        }else{
            if (this.e && this.e.pageX != 'undefined'){
                this.dataCode = 1;
            }
        }
    }

    this.initialised = true;
}

2 个答案:

答案 0 :(得分:8)

我同意你对不带括号if/else陈述的厌恶。你的包围似乎对我来说是正确的。但是,这是一种更简单的方法:

this.setFlags = function() {
    if (document.documentElement) {
        this.dataCode = 3;
    } else if (document.body && typeof document.body.scrollTop != 'undefined') {
        this.dataCode = 2;
    } else if (this.e && this.e.pageX != 'undefined') {
        this.dataCode = 1;
    }

    this.initialised = true;
}

正如Dave Chen在评论中指出的那样,由于if/else分支的简单性和并行性 - 它们都为this.dataCode赋值 - 你也可以使用嵌套的三元运算符:

this.setFlags = function() {
    this.dataCode = document.documentElement                           ? 3
                  : document.body
                      && typeof document.body.scrollTop != 'undefined' ? 2
                  : this.e && this.e.pageX != 'undefined'              ? 1
                  :                                                      this.dataCode;

    this.initialised = true;
}

这样做的好处是更清楚的是,所有条件都只是确定要分配给this.dataCode的值。缺点(在我看来是一个很大的缺点)是,除非嵌套的三元运算符以谨慎的方式格式化(例如我在这里所做的),否则基本上不可能对任何事物有所了解。继续进行而不仔细研究表达。不幸的是,我熟悉的大多数JavaScript代码格式化程序在格式化这些表达式(或保留这种格式)方面做得很差。 (有趣的是,我使用的几种Perl格式化程序做得非常好。但这不是Perl。)

答案 1 :(得分:1)

这是正确的,但你可以使它更整洁:

this.setFlags = function() {
  if (document.documentElement) {
    this.dataCode = 3;
  } else if (document.body && typeof document.body.scrollTop != 'undefined') {
    this.dataCode = 2;
  } else if (this.e && this.e.pageX != 'undefined') {
    this.dataCode = 1;
  }

 this.initialized = true;
};

哦,这已经发布了