Javascript 教程中函数中的if-else语句有什么意义?
我正在使用Vue查看一个简单的播放列表 我对作者的Javascript 教程中函数中的if-else语句有什么意义?,javascript,vue.js,Javascript,Vue.js,我正在使用Vue查看一个简单的播放列表 我对作者的play()函数感到困惑,尤其是if-else语句系列。它似乎会检查index是否是一个数字,如果它是(我无法想象它会是什么样子),它似乎会跳过检查所选曲目是否与当前曲目相同的其余代码,除此之外: 作者对上述代码的总结: 该方法将索引作为参数,用于指定轨迹 待玩。首先,我们得到所选轨迹的索引。然后,我们 进行一些检查以确定索引的值。如果索引是 作为参数提供,它是一个数字,然后我们使用它。如果有轨道 如果选定,则使用选定轨迹的索引。如果选择了 轨迹
play()
函数感到困惑,尤其是if-else语句系列。它似乎会检查index
是否是一个数字,如果它是(我无法想象它会是什么样子),它似乎会跳过检查所选曲目是否与当前曲目相同的其余代码,除此之外:
作者对上述代码的总结:
该方法将索引作为参数,用于指定轨迹
待玩。首先,我们得到所选轨迹的索引。然后,我们
进行一些检查以确定索引的值。如果索引是
作为参数提供,它是一个数字,然后我们使用它。如果有轨道
如果选定,则使用选定轨迹的索引。如果选择了
轨迹与当前轨迹不同,我们使用stop()方法
停止当前的一个。最后,如果没有传递索引参数
如果未选择轨迹,则使用索引数据属性的值
我检查了MDN和其他一些源代码,没有发现JavaScript中的
if()
后跟else if()
有什么特别之处。所以我想我肯定错过了什么。为什么索引上的验证检查与检查所选曲目是否与当前曲目相同有关?另一个在else if()
和else
块中的检查看起来像是你不想遗漏的东西,但他的应用程序现场演示仍然有效。我要求作者在文章的评论中详细说明,但这篇文章已经快一年了,所以我不确定他是否会回复我。提前感谢大家。这不是真正的验证测试,它只是检测是否提供了参数。如果未提供参数或参数不是数字,则函数将执行默认行为
如果调用者使用track.play(2)
,他们会特别告诉调用者播放曲目2。测试if(typeof index='number')
将成功,我们将使用给定的索引
如果调用者使用track.play()
,索引将是未定义的
,这不是一个数字,因此测试将失败,然后我们将继续进行测试,否则如果
测试。如果有一个选定的轨迹,我们使用它(如果当前轨迹不同,首先停止当前轨迹)
如果没有选定的轨迹,我们将进入最后一个else
子句,它使用当前对象的index
属性。这不是真正的验证测试,只是检测是否提供了参数。如果未提供参数或参数不是数字,则函数将执行默认行为
如果调用者使用track.play(2)
,他们会特别告诉调用者播放曲目2。测试if(typeof index='number')
将成功,我们将使用给定的索引
如果调用者使用track.play()
,索引将是未定义的
,这不是一个数字,因此测试将失败,然后我们将继续进行测试,否则如果
测试。如果有一个选定的轨迹,我们使用它(如果当前轨迹不同,首先停止当前轨迹)
如果没有选定的曲目,我们将进入最后一个else
子句,它使用当前对象的index
属性。Soplay()
vsplay(2)
Soplay()
vsplay(2)
谢谢!我知道我错过了什么。因此,我按照从用户单击曲目开始的步骤进行操作,当用户点击播放按钮时,我记得事件处理程序有括号(PlayerControlsBars.vue
的第21行),而stopTrack和pauseTrack处理程序只是对函数的引用。为什么playTrack()
的括号中没有其他两个?它们是否允许在索引可用时传递索引?不过我也不明白,因为只有当事件发送到父级时,索引才会确定。因为当你停止或暂停时,唯一重要的是已经播放的曲目。但是当你想演奏一首曲子时,你有选择。对。我不明白的是,在PlayerControlsBars
组件中,整个组件中没有索引道具,也没有索引引用等,因此似乎当调用playTrack(index)
并向父级发出playTrack
事件时,索引永远不会出现。所以我甚至不认为把它放在那里有什么意义。play()
的最后一行是this.index=index
。因此,一旦播放一首曲目,下次调用track.play()
时,它将成为默认索引。好的,那么当该组件中甚至没有引用索引时,将索引作为有效负载传递给PlayerControlsBars
的父组件的目的是什么?谢谢!我知道我错过了什么。因此,我按照从用户单击曲目开始的步骤进行操作,当用户点击播放按钮时,我记得事件处理程序有括号(PlayerControlsBars.vue
的第21行),而stopTrack和pauseTrack处理程序只是对函数的引用。为什么playTrack()
的括号中没有其他两个?它们是否允许在索引可用时传递索引?不过我也不明白,因为只有当事件发送到父级时,索引才会确定。因为当你停止或暂停时,唯一重要的是已经播放的曲目。但是当你想演奏一首曲子时,你有选择。对。我不明白的是,在PlayerControlsBars
组件中,没有索引道具,没有引用
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
}