javascript函数始终返回第一个元素

javascript函数始终返回第一个元素,javascript,jquery,if-statement,conditional-statements,Javascript,Jquery,If Statement,Conditional Statements,我有下面的javascript函数来检查链接,基于链接是一个曲目或相册,它应该从链接中提取id,但它永远不会通过第一个if语句,它将始终提醒在链接中找到的曲目,即使我提供了相册链接,任何帮助都将不胜感激。 链接如下所示: https://open.spotify.com/album/1XGo0OD90wIlRccwLe29L9?si=egthfx9CRfuPIhLJ1uXCPA https://open.spotify.com/track/1SWyGZhn3nyLUZRfWvQ0to?si=Tl

我有下面的javascript函数来检查链接,基于链接是一个曲目或相册,它应该从链接中提取id,但它永远不会通过第一个if语句,它将始终提醒在链接中找到的曲目,即使我提供了相册链接,任何帮助都将不胜感激。 链接如下所示:

https://open.spotify.com/album/1XGo0OD90wIlRccwLe29L9?si=egthfx9CRfuPIhLJ1uXCPA
https://open.spotify.com/track/1SWyGZhn3nyLUZRfWvQ0to?si=Tl-fwsqxQf-J8gZWps2PqQ

function getLinkID(link) {
        if(link.indexOf("spotify")) {
            if(link.indexOf("track")) {
                alert("found track in link");
                var linkID = link.split('track/').pop().split('?')[0];
            } else if(link.indexOf("album")) {
                alert("found album in link");
                var linkID = link.split('album/').pop().split('?')[0];

            }
        } else if(link.indexOf("apple")) {

        } 
        return linkID;
    }

indexOf
返回匹配项的索引号,如果没有匹配项,则返回
-1
。此外,如果在
第一个
索引中有匹配项,则它将返回
0
,这将破坏您的代码。您应该使用
包含

更新自

link.indexOf("spotify")


注意,
includes
在使用IE时不起作用。对于IE,您需要创建一个polyfill或将条件更新为
link.indexOf(“spotify”)!=-1

indexOf
返回匹配的索引号,如果不匹配,则返回
-1
。此外,如果在
第一个
索引中有匹配项,则它将返回
0
,这将破坏您的代码。您应该使用
包含

更新自

link.indexOf("spotify")


注意,
includes
在使用IE时不起作用。对于IE,您需要创建一个polyfill或将条件更新为
link.indexOf(“spotify”)!=-1

如果未找到IndexOf,则返回-1,并且-1是真值。因此,它将始终返回true。

如果找不到,IndexOf将返回-1,并且-1是真值。因此,它将始终返回真值

函数始终返回第一个元素

这里的问题是第一个条件总是
true
,只有当索引是
0
,即使单词没有出现在链接中,因为
link.indexOf(“spotify”)
将返回
索引或
-1

因此,当找不到单词时,它将返回
-1
,这是一个
truthy
值,这就是为什么条件为
true
,您可以通过在控制台中键入
布尔(-1)
来确认这一点

您需要检查返回的
索引是否高于
-1
,以便正确评估条件:

if(link.indexOf("spotify")>-1)
函数始终返回第一个元素

这里的问题是第一个条件总是
true
,只有当索引是
0
,即使单词没有出现在链接中,因为
link.indexOf(“spotify”)
将返回
索引或
-1

因此,当找不到单词时,它将返回
-1
,这是一个
truthy
值,这就是为什么条件为
true
,您可以通过在控制台中键入
布尔(-1)
来确认这一点

您需要检查返回的
索引是否高于
-1
,以便正确评估条件:

if(link.indexOf("spotify")>-1)
试试这个:)

试试这个:)


.indexOf
如果(~link.indexOf(“spotify”))
只是扩展Jaromanda X的注释,当它找不到什么东西时返回
-1
,这是“truthy”-最快(但不明显)的修复
如果(~link.indexOf(“spotify”)
,-1在js
~link中是真的。当
indexOf
是-1并且是负数(truthy)时,indexOf
是0(假的)否则-尽管
link.indexOf(“spotify”)>=0或
link.indexOf(“spotify”)>-1或
link.indexOf(“spotify”)!=-1
是处理此代码的常用方法
。indexOf
在找不到任何东西时返回
-1
,这是“真实的”-最快(但不明显)的修复
如果(~link.indexOf(“spotify”)
只是在Jaromanda X的注释上展开,-1在js
~link中是真实的。indexOf
是0(错误)当
indexOf
为-1且为负数(truthy)时,否则-尽管
link.indexOf(“spotify”)>=0
link.indexOf(“spotify”)>-1
link.indexOf(“spotify”)!=-1
处理此代码的常用方法是“在internet explorer中不起作用”caveat@JaromandaX-同意,谢谢。已更新。通常为“在internet explorer中不起作用”caveat@JaromandaX-同意,谢谢。已更新。如果indexOf返回0,则不更新。。。但是…如果indexOf返回0,则不是。。。但是