Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果(true | | true | false)语句在javascript中为true?_Javascript_If Statement_Boolean_Conditional Statements - Fatal编程技术网

如果(true | | true | false)语句在javascript中为true?

如果(true | | true | false)语句在javascript中为true?,javascript,if-statement,boolean,conditional-statements,Javascript,If Statement,Boolean,Conditional Statements,我有这段代码来保护我的页面不被篡改 window.onload = function(){ try { if (window.parent && window.parent.location.hostname !== "app.herokuapp.com"){ throw new Error(); } catch (e){ //do something } } 它工作得非常好,直到我尝试添加更多值来比较主机名。我想添加我的自定

我有这段代码来保护我的页面不被篡改

window.onload = function(){
 try
  {
   if (window.parent && window.parent.location.hostname !== "app.herokuapp.com"){
      throw new Error();
   }
   catch (e){
   //do something
   }
  }
它工作得非常好,直到我尝试添加更多值来比较主机名。我想添加我的自定义域名。我试过这个:

window.onload = function(){
 try
  {
   if (window.parent && (window.parent.location.hostname !=="app.herokuapp.com" 
   || window.parent.location.hostname !== "www.app.com"
   || window.parent.location.hostname !== "localhost")){
      throw new Error();
   }
   catch (e){
   //do something
   }
  }
这总是返回true,因此抛出错误。我怎样才能做到这一点?除非主机名与这些字符串匹配,否则我想抛出一个错误,不管发生什么,它都会抛出一个错误。我是新手,希望能得到一些帮助!谢谢


另外,我添加了“localhost”,因为我希望在推送到heroku之前能够在本地测试它

|
如果任何操作数的计算结果为
true
,则返回计算结果为
true
。也许你想用
&&
来代替:

if (window.parent 
    && window.parent.location.hostname !== "app.herokuapp.com" 
    && window.parent.location.hostname !== "www.app.com"
    && window.parent.location.hostname !== "localhost")
或通过:

如果所有操作数的计算结果均为
true
,则该值将计算为
true

进一步阅读


|
如果任何操作数的计算结果为
,则返回计算结果为
。也许你想用
&&
来代替:

if (window.parent 
    && window.parent.location.hostname !== "app.herokuapp.com" 
    && window.parent.location.hostname !== "www.app.com"
    && window.parent.location.hostname !== "localhost")
或通过:

如果所有操作数的计算结果均为
true
,则该值将计算为
true

进一步阅读


    • 既然已经有了一个相当完整的答案,我建议采用另一种方法。当你有这样长的语句时,我发现使用高阶函数更容易阅读。这样考虑您的情况:“检查主机名是否与任何给定字符串都不匹配”。这就是我想阅读代码的方式,其他一切都是样板:

      function not(y) {
        return function(x) {
          return x !== y;
        };
      }
      
      var hosts = ['app.herokuapp.com','www.app.com','localhost'];
      var parent = window.parent;
      
      if (parent && hosts.some(not(parent.location.hostName))) {
        ...
      }
      

      既然已经有了一个相当完整的答案,我会建议一个不同的方法。当你有这样长的语句时,我发现使用高阶函数更容易阅读。这样考虑您的情况:“检查主机名是否与任何给定字符串都不匹配”。这就是我想阅读代码的方式,其他一切都是样板:

      function not(y) {
        return function(x) {
          return x !== y;
        };
      }
      
      var hosts = ['app.herokuapp.com','www.app.com','localhost'];
      var parent = window.parent;
      
      if (parent && hosts.some(not(parent.location.hostName))) {
        ...
      }
      

      我开始这样想,但不知道如何实现它。非常感谢。它看起来确实更干净。我开始这样想,但不确定如何完成它。非常感谢。它看起来确实干净。