JavaScript 中没有 else if 结构的关键字

132 阅读2分钟

JavaScript 中没有 else if 结构

是的,你没有看错,在 ECMA262 规范中,并不存在 else if 这种语法结构,虽然在开发中我们经常使用这种结构,else if 也不是一个保留字/关键字,而是由社区发明出来的 elseif 语句的结合体。

if 语句有两种使用方式:

if 语句后使用花括号( {} ):

if (express) {
	express
	...
}

if 语句后不使用花括号( {} ):

if (express) express

else 语句同 if 语句,在使用时也可以不使用花括号:

if (false) {
	express
} else express

else 语句中可以书写任何任何符合规范的语句、表达式、代码块等,所以上例中 else 语句中的 express 可以任意合法的 JavaScript 代码;如果 express 部分是一个完整的代码块时,可以换行;所以,else 语句中的 express 部分可以是一个 if 语句:

if (false) {
	...
} else {
	if (condition) {
		...
	}
}

上例中的解构,else 语句中的 if 语句可以看作是一个完整的代码块,所以可以将 else 语句的花括号删除;同时,在删除 else 语句的花括号时,应将其中的逻辑/代码书写在 else 之后,于是就有了 else if 结构:

// 1、删除 else 部分的花括号
if (false) {
	...
} else
	if (condition) {
		...
	}

// 2、将 if 语句与 else 书写在同一行;if 语句是一个完整的代码块,允许换行
if (false) {
	...
} else if (condition) {
		...
	} // *
	
// 3、为了美观,将上面 else 中的 if 语句的结束花括号向前提
if (false) {
	...
} else if (condition) {
		...
}

// else if 结构就产生了

所以,else if 这种写法是社区根据 ECMA 规范发明出来的写法,并不存在于规范中,且规范中也没有 关于 else if 结构的定义;else if 不是 JavaScript 关键字/保留字。

日常开发中,推荐使用花括号包裹 ifelse 的表达式部分。