【问题标题】:Javascript - Wildcard inside an IF statementJavascript - IF 语句中的通配符
【发布时间】:2016-04-10 09:39:22
【问题描述】:

我有一个 javascript if 语句,它检查当前页面的 URL 是否与字符串匹配。此处由 item.page 表示的字符串。

我想使用如下通配符,但它不起作用。我应该如何格式化这个表达式?

 if ('*' + item.page + '*' != '*' + document.location.href + '*' {

【问题讨论】:

  • 有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。 (杰米·扎温斯基,1997)

标签: javascript wildcard


【解决方案1】:

你可以用String.prototype.indexOf()做到这一点

if (document.location.href.indexOf(item.page) > -1) {
 console.log("Current URL contains" + item.page);
}

DEMO

【讨论】:

    【解决方案2】:

    不要滥用String.prototype.indexOf

    使用String.prototype.includes:

    if (document.location.href.includes(item.page)) {
        // …
    }
    

    【讨论】:

    • 浏览器兼容性如何?
    • @SmokeyPHP 支持我出生之前的浏览器。使用babel
    • 这是一种滥用,因为我们对索引一点也不感兴趣。我们只想知道一个字符串是否包含另一个字符串。这就是String.prototype.includes 的用途。 (“说出你的意思”方法导致代码实际可读。)
    • 至于“直到所有环境都支持 ES6”:这是一个蹩脚的借口; IE6 永远不会支持 ES6。只需习惯这样一个事实,即我们必须将高级语言转换为低级语言以支持整个网络。自 FORTRAN 以来就是这样,当时开发人员拒绝停止编写程序集。
    • @SmokeyPHP 你确实意识到,如果你试图将所有内容都归结为 ES5,你的项目很快就会变得不可读/不可维护,而 ES5 也没有完全覆盖每个环境。 Polyfilling 一直存在,Web 长期以来一直使用预处理代码(Less、SASS、TypeScript、CoffeeScript、Traceur、Babel、Jade 等)。让我们给 OP 一些最新的帮助,而不是一些他在 1999 年可以使用的建议。
    【解决方案3】:

    您可以使用不带通配符的隐式转换为正则表达式:

    if (document.location.href.match(item.page)) ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      相关资源
      最近更新 更多