更正JavaScript IF-Else语法

更正JavaScript IF-Else语法,javascript,Javascript,我正在更新一个现有的JavaScript应用程序。此更新的一部分涉及更好地格式化内容和清理代码 现在这是一个函数,它使用if()和else语句,但没有所有正确的括号。。。我个人讨厌人们使用这种速记方法,更讨厌他们有时混合使用,有时不使用。下面的示例代码就是这种情况 this.setFlags = function() { if (document.documentElement) this.dataCode = 3; else if (document.b

我正在更新一个现有的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;
}

我和你一样不喜欢没有包装的
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.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。)

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

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;
};

哦,这已经发布了

是正确的。祝贺你正确地添加了括号。这是你唯一的问题吗?这两个都很好,当你必须在
if
语句中只写一行时,没有必要把
{}
放在一行上。如果案例/条件经常被认为是一种不好的做法,那么不在单行上使用{},因为如果缩进不好,错误可以隐藏在显而易见的地方。你也可以使用三元,但我不认为这是OP的要求。问题不是“我怎样才能使这段代码更好?”@DaveChen-是的,这是另一种可能性。我会在我的回答中加上这个。谢谢。太好了,我知道这是一个超级基本的问题,但它的格式对我来说不是很清楚,谢谢,是的,欢迎改进@达维岑——好吧,我收回这句话。没有无条件的
else
大小写,因此没有值可用作复合三元表达式中的最后一个操作数(当所有三个
测试都失败时)。没有,因为您可以将其设置为自身。三元有时很难看,但总是有效的<代码>例如this.dataCode==什么?设置值:此.dataCode