[英]How do the if-else statements in this function from a tutorial make any sense?
我将通过本教程来学习Vue的简单播放列表。
我对作者的play()
函数感到困惑,特别是一系列if-else语句。 似乎要检查index
是否为数字,如果为数字(我无法想象它不会是数字),则似乎跳过了其余代码,以检查所选轨道是否与数字相同。当前曲目,以及其他内容(此处链接到所讨论的repo和函数) :
play (index) {
let selectedTrackIndex = this.playlist.findIndex(track => track === this.selectedTrack)
if (typeof index === 'number') {
index = index
} else if (this.selectedTrack) {
if (this.selectedTrack != this.currentTrack) {
this.stop()
}
index = selectedTrackIndex
} else {
index = this.index
}
let track = this.playlist[index].howl
if (track.playing()) {
return
} else {
track.play()
}
this.selectedTrack = this.playlist[index]
this.playing = true
this.index = index
}
上面代码的作者摘要:
该方法以索引作为参数,该索引指定要播放的曲目。 首先,我们获得所选曲目的索引。 然后,我们进行一些检查以确定索引的值。 如果提供索引作为参数,并且它是一个数字,那么我们将使用它。 如果选择了轨道,我们将使用选定轨道的索引。 如果所选轨道与当前轨道不同,则使用stop()方法停止当前轨道。 最后,如果既未传递索引参数也未选择轨道,则将使用索引数据属性的值。
我检查了MDN和其他一些资源,但在JavaScript中没有发现关于if()
和else if()
任何特殊之处。 所以我想我必须在这里丢失一些东西。 为什么对index
进行验证检查与检查所选轨道是否与当前轨道相同? else if()
和else
块中的其他检查似乎是您不希望遗漏的东西,但是他的应用程序实时演示仍然有效。 我要求作者在文章的评论中进行详细说明,但该文章已经发表了将近一年,所以我不确定他是否会回复我。 预先感谢大家。
这实际上不是一个验证测试,它只是检测是否提供了参数。 如果未提供参数,或者该参数不是数字,则该函数将执行默认行为。
如果调用者使用track.play(2)
,他们专门告诉它播放轨道2。测试if (typeof index == 'number')
是否成功,我们将使用给定的索引。
如果调用者使用track.play()
,则index
将是undefined
,而不是数字,因此测试将失败,然后继续进行else if
test。 如果有选定的轨道,我们将使用该轨道(如果当前轨道不同,则首先停止它)。
如果没有选定的轨道,我们将进入最后的else
子句,该子句使用当前对象的index
属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.