我不明白JavaScript中的这种比较是如何工作的

时间:2016-03-02 15:23:11

标签: javascript jquery frontend

考虑以下变量href

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

我遇到过这样的情况:

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

任何人都可以解释这种比较是如何运作的,或者为什么有人会这样做?

3 个答案:

答案 0 :(得分:0)

含义

您的比较字面意思是:

  1. 如果href存在
  2. 并且href是一个不包含子字符串的字符串' javascript'
    • 然后,返回TRUE
    • 其他,请返回FALSE
  3. 部件

    它由以下组件组成:

    1. href :如果href存在,我将a truthy value
    2. href.indexOf('javascript') == -1 :如果" javascript"将为TRUE不是字符串href
    3. 的子字符串
    4. A && B:如果TRUEA都具有真实价值,则返回B
    5. X ? Y : Z:如果Y具有真实值,则返回X;如果不是<{li},则返回Z
    6. 用例

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

      好吧,请考虑以下HTML:

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

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

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

答案 1 :(得分:-1)

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

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

的简写

如果元素AND上存在href 如果href不是一些javascript代码(例如javascript:alert(&#39; haha​​&#39;)),则为true,否则为false。在此示例中,第二行可能已分配给某个变量。

答案 2 :(得分:-1)

这是一项三元手术。

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

希望有所帮助!