考虑以下变量href
:
var href = element.attr('href');
我遇到过这样的情况:
href && href.indexOf('javascript') == -1 ? TRUE : FALSE
任何人都可以解释这种比较是如何运作的,或者为什么有人会这样做?
答案 0 :(得分:0)
您的比较字面意思是:
href
存在href
是一个不包含子字符串的字符串' javascript'
TRUE
FALSE
它由以下组件组成:
href
:如果href
存在,我将a truthy value href.indexOf('javascript') == -1
:如果" javascript"将为TRUE
不是字符串href
A && B
:如果TRUE
和A
都具有真实价值,则返回B
X ? Y : Z
:如果Y
具有真实值,则返回X
;如果不是<{li},则返回Z
为什么有人会这样做,你可能会问?为什么有人会在javascript
标记的href
内查找字符串<a>
,您可能会问?
好吧,请考虑以下HTML:
<a href="javascript:alert('Hello World')">Click me</a>
&#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
希望有所帮助!