Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 教程中函数中的if-else语句有什么意义?_Javascript_Vue.js - Fatal编程技术网

Javascript 教程中函数中的if-else语句有什么意义?

Javascript 教程中函数中的if-else语句有什么意义?,javascript,vue.js,Javascript,Vue.js,我正在使用Vue查看一个简单的播放列表 我对作者的play()函数感到困惑,尤其是if-else语句系列。它似乎会检查index是否是一个数字,如果它是(我无法想象它会是什么样子),它似乎会跳过检查所选曲目是否与当前曲目相同的其余代码,除此之外: 作者对上述代码的总结: 该方法将索引作为参数,用于指定轨迹 待玩。首先,我们得到所选轨迹的索引。然后,我们 进行一些检查以确定索引的值。如果索引是 作为参数提供,它是一个数字,然后我们使用它。如果有轨道 如果选定,则使用选定轨迹的索引。如果选择了 轨迹

我正在使用Vue查看一个简单的播放列表

我对作者的
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
属性。

So
play()
vs
play(2)
So
play()
vs
play(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
}