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