多个"如果"声明

时间:2015-04-19 03:53:06

标签: javascript jquery

有没有办法在一个中包含多个javascript“if”语句?例如:

if (location.host === "www.google.com", "www.jsfiddle.net") { blah };

或者我只需要使用“||”,例如:

if (location.host === "www.google.com" || location.host === "www.jsfiddle.net"){ blah };

如果有办法做到这一点,或者可能是一种更简单的方法,请你在下面注明。

这是不同的,因为另一个问题只收到JS答案,但是这个问题已经收到了jQuery的回复,以及它是为了获得不同的目标。

6 个答案:

答案 0 :(得分:4)

您可以通过以下方式使用javascript indexOf方法:

var array = ["www.google.com", "www.jsfiddle.net"]
if(array.indexOf(location.host) != -1)
{ //ok
}

答案 1 :(得分:3)

另一种选择是使用switch案例。我个人的做法是,如果我必须执行多个elseif语句,我会使用一个切换案例。 IMO它更容易阅读,如果你开始处理非常大的查找,它的性能更高。

switch(location.host) {
  case 'www.google.com':
    // blah
    break;
  case 'www.jsfiddle.net':
   //blah
   break;
  case 'www.stackoverflow.com':
   // blah
   break;
  default:
   // blah
}

答案 2 :(得分:1)

成语是:

if(["www.google.com", "www.jsfiddle.net"].indexOf(location.host) > -1) { ... }

但这只适用于IE9及更高版本,以及现代浏览器。

答案 3 :(得分:1)

然而,不是您使用的语法,您可以编写一个函数。



function assertAnyEquals(value) {
      "use strict";
      var args = new Array(arguments.length);
      for (var i = 1; i < arguments.length; i++) { 
          args[i] = arguments[i];
      } 
      console.log(args);

      return args.some(function(arg) { 
        if (value === arg) { 
          return true;
        }
      });
    }
console.log(assertAnyEquals("v", "c"));
&#13;
&#13;
&#13;

然后使用:

if (assertAnyEquals(location.href, "www.google.com", "www.jsfiddle.net")) { 
    // do stuff 
}

我更喜欢这样的东西,因为我很清楚我在做这个功能的名字。

编辑:更新了这个的实现,因为我意识到它甚至在找到匹配后迭代了数组元素。现在它没有。

答案 4 :(得分:1)

indexOf在可读性方面没有多大意义。我更喜欢使用contains函数来封装&#34;存在检查&#34;。 LodashUnderscore库有一个,但您可以轻松自己推送:

function contains(array, element) {
    return array.indexOf(element) > -1;
}

if (contains(["www.google.com", "www.jsfiddle.net"], location.host)) { blah };

答案 5 :(得分:1)

我喜欢使用对象查找表,因为它可以保存引号,但总是比通过indexOf搜索要快得多:

var oks= {"www.google.com":1, "www.jsfiddle.net":1}
if(oks[location.host]===1){ 
   alert("ok!")
}
它的速度要快得多,因为没有方法调用,属性查找速度非常快。它比开启大型集合更快,当然也更灵活,可重复使用。

任何时候我需要一个来自另一个值的值,没有嵌套条件或其他复杂情况,我会选择LUT。

这种模式还允许您轻松添加新值(oks[key]=1),使用extend()来合并集合而不会出现欺骗,并在语义上删除不需要的选项(delete oks['www.google.com']),而不是一堆拼接(indexOf(),1)malarky。它在旧浏览器中也很有用,与[] .indexOf()...

不同

您也可以使用hasOwnProperty.call(oks, key),但它会抵消一些性能优势。

另外,这实际上只对函数,字符串,数字和某些数组有用,它不允许按对象进行查找,就像Map()那样。

我应该提到另外一种IE8友好的做indexOf的方式: if(",www.google.com,www.jsfiddle.net,".indexOf([,key,])!==1){...}