在看了一些网上的例子后,我收集了两种不同的解释:
例如:var x = A || B;
- 如果A存在而B不存在,则返回左边。
- 如果A存在且B存在,则返回右边(最后一个被评估的值)。
基于这个逻辑,我认为x应该返回:v.item(0).click()
。但是,在测试时,x首先返回了B,然后才返回A,也就是先触发了B,然后又触发了A。为什么? (http://jsfiddle.net/nysteve/QHumL/59/)
HTML:
<div class="indeed-apply-button" onclick="alert('BOOM BUTTON');">boo</div>
<div class='view_job_link' onclick="alert('BOOM LINK');">boo</div>
JavaScript
var v = document.getElementsByClassName('view_job_link');
var i = document.getElementsByClassName('indeed-apply-button');
var x = v.item(0).click() || i.item(0).click();
编辑于2013年10月10日下午1:02
我没有提到我的真实意图,但基于答案和讨论,我的目标本质上是将以下代码转换为我最初提到的JavaScript代码。
var v = document.getElementsByClassName('view_job_link');
var i = document.getElementsByClassName('indeed-apply-button');
if(v){v.item(0).click();}
else if(i){i.item(0).click();}
else{}
在上面的代码中,你如何理解if(v){v.item(0).click();}
和短路的区别?
||
进行短路求值检查值的真实性。因此,它正在检查调用.click()
的结果的真实性。 - Ian