【问题标题】:I don't understand how this comparison in JavaScript works我不明白 JavaScript 中的这种比较是如何工作的
【发布时间】:2016-03-02 15:23:11
【问题描述】:

考虑以下变量href

var href = element.attr('href');

我遇到过这样的情况:

href && href.indexOf('javascript') == -1 ? TRUE : FALSE

谁能解释这种比较是如何进行的,或者为什么有人会这样做?

【问题讨论】:

  • 如果你的href存在并且它包含它不包含javascript返回true如果否则返回false,似乎有点奇怪,除非那是脱离上下文应该有一些值应该用于
  • 我猜它正在查看链接是否以"javascript:" 开头,并在单击时执行代码,而不是在某处导航。但是,如果没有更多上下文,就无法确定。
  • 有用的if true ? true : false
  • 谢谢大家.. 从所有这些 cmets 中,我可以认为 href 和 href.indexOf('javascript') == -1 需要有效才能使结果为真(如果不是假)。就像如果 href 有值并且 href.idexof 没有字符串 javascript 那么我们将得到结果为 false。如果我错了,请纠正我

标签: javascript jquery frontend


【解决方案1】:

意义

您的比较字面意思是:

  1. 如果href 存在
  2. href 是一个不包含子字符串 'javascript' 的字符串
    • 然后,返回TRUE
    • 否则,返回FALSE

组件

它由以下组件组成:

  1. href :
    如果href 存在,将有a truthy value
  2. href.indexOf('javascript') == -1 :
    如果“javascript”不是字符串href的子字符串,则为TRUE
  3. A && B
    如果 AB 都具有真实值,则返回 TRUE
  4. X ? Y : Z :
    如果X 具有真实值,则返回Y,如果没有,则返回Z

用例

您可能会问,为什么有人会这样做?你可能会问,为什么有人会在<a> 标签的href 中查找字符串javascript

好吧,考虑下面的 HTML:

<a href="javascript:alert('Hello World')">Click me</a>

现在,所有这一切都是在您单击该链接时触发alert()。虽然这是无害的,但黑客可以使用同样的技术来运行各种恶意代码。

虽然它不完全是一个防弹解决方案,但比较href && href.indexOf('javascript') == -1 ? TRUE : FALSE 几乎可以肯定用于查找此类恶意代码并将其删除。

【讨论】:

    【解决方案2】:

    var href = 某个元素的属性(重定向到的链接)

    x ? y : z 语法是 if (x) { y } else { z }

    的简写

    如果元素上存在 href 并且 如果 href 不是一些 javascript 代码(例如 javascript:alert('haha')),则为 true,否则为 false。在这个例子中,第二行可能分配给了某个变量。

    【讨论】:

    • 谢谢大家.. 从所有这些 cmets 中,我可以认为 href 和 href.indexOf('javascript') == -1 需要有效才能使结果为真(如果不是假)。就像如果 href 有值并且 href.idexof 没有字符串 javascript 那么我们将得到结果为 false。如果我错了,请纠正我。
    【解决方案3】:

    它是一个三元运算。

    var href = element.attr('href');
    console.log(href && href.indexOf('javascript') == -1 ? true : false);
    

    相当于:

    var href = element.attr('href');
    if(href && href.indexOf('javascript') == -1) {
        console.log(true);
    } else {
        console.log(false);
    }
    

    您可以在此处查看它如何处理测试字符串的示例:https://jsfiddle.net/igor_9000/ha6kh93c/

    更多信息请参见开发者文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多