true == false以某种方式评估为true?

时间:2015-03-20 17:54:20

标签: javascript conditional-statements

我一直在努力搜索一些使用OWASP CRSFGuard项目进行保护的网页。该库似乎导致我的一个请求获得401,所以我开始挖掘他们的代码并注意到以下内容;

function isValidDomain(current, target) {
    var result = false;

    /** check exact or subdomain match **/
    if(current == target || current == 'localhost') {
        result = true;
    } else if(true == false) {
        if(target.charAt(0) == '.') {
            result = current.endsWith(target);
        } else {
            result = current.endsWith('.' + target);
        }
    }

    return result;
}

据我所知,必须有执行此代码的实例; result = current.endsWith('.' + target);。鉴于true == false本质上是错误的,代码将如何达到该声明?这有些奇怪(我知道我们并没有使用严格的===相等,但认真......)?

2 个答案:

答案 0 :(得分:1)

我会说Blazemonger很可能是正确的。

else if在某些时候可能还有一些其他条件,无论出于何种原因,他们认为他们不再需要执行该代码块,所以他们将条件改为总是假的。

程序员使用1 === 0作为false的指示也并非完全不常见。为什么他们想要这样做是任何人的猜测。

答案 1 :(得分:1)

答案:它永远不会到达该代码块。

function isValidDomain(current, target) {
  var result = false;

  /** check exact or subdomain match **/
  if (current == target || current == 'localhost') {
    result = true;
  } else if (true == false) {
    if (target.charAt(0) == '.') {
      result = current.endsWith(target);
    } else {
      result = current.endsWith('.' + target);
    }
  }

  return result;
}

var trueFalse = document.getElementById('trueFalse');
trueFalse.innerHTML = isValidDomain('true', 'false') ? 'WTF!' : 'All is good in the JS World';

trueFalse.addEventListener('click', function(e) {
  trueFalse.innerHTML = (true == false) ? 'WTF!' : 'All is good in the JS World Still';
});
<div id="trueFalse"></div>