【问题标题】:Javascript multiple matches for IF [duplicate]IF的Javascript多个匹配项[重复]
【发布时间】:2014-04-21 23:53:55
【问题描述】:

我正在尝试检测 javascript 中的图像,我认为这是可行的,但事实并非如此。我怎样才能正确地做到这一点?

if (url.substr(url.length - 3 ) == 'gif' || 'jpg' || 'png')

【问题讨论】:

  • 是什么让你相信这会奏效?

标签: javascript


【解决方案1】:

您不能以这种方式使用||。您必须将 if 语句重写为:

var lastThree = url.substr(url.length - 3);
if(lastThree == 'gif' ||
   lastThree == 'jpg' ||
   lastThree == 'png')
{
    // do something
}

或者你可以使用一个数组(我个人更喜欢):

if(['gif','jpg','png'].indexOf(url.substr(url.length - 3)) > -1)
{
    // do something
}

您还应该对 URL 子字符串使用 toLowerCase() 方法,因为某些图像文件可能以 JPG 或 GIF 结尾。

【讨论】:

  • 编辑:建议使用 toLowerCase 方法
【解决方案2】:

您似乎误解了 OR 的作用:

var ext = url.substr(url.length - 3 );
if (ext == 'gif' || ext == 'jpg' || ext == 'png') {
   ..
}

【讨论】:

    【解决方案3】:

    你可以使用正则表达式:

    if (/gif|jpg|png/i.test(url.substr(url.length - 3 )))
    

    注意jpg也可以是jpeggif可能是giff还有 tiff 等格式。并且扩展名不可靠,无法确定文件格式。

    编辑

    正如 Cookie Monster 所建议的,您可以使用以下命令节省一些输入:

    /(gif|jpg|png)$/i.test(url)
    

    并根据需要添加额外内容:

    /(gif|jpg|jpeg|jfif|png|tiff|raw|bmp|svg)$/i.test(url)
    

    【讨论】:

    • 如果您要使用正则表达式,为什么不将其锚定到字符串的末尾而不是使用substr
    【解决方案4】:

    ||之后需要提供完整的条件

        var src = url.substr(url.length - 3 );
        if (src === 'gif' || src === 'jpg' || src === 'png')
    

    === 用于检查值和类型。

    【讨论】:

      猜你喜欢
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2015-09-10
      相关资源
      最近更新 更多