无法理解此Javascript语法

时间:2020-05-13 20:20:26

标签: javascript

此链接提供了以下代码段:https://www.gkogan.co/blog/save-url-parameters/

<script>
  var queryForm = function(settings){
    var reset = settings && settings.reset ? settings.reset : false;
    var self = window.location.toString();
    var querystring = self.split("?");
    if (querystring.length > 1) {
      var pairs = querystring[1].split("&");
      for (i in pairs) {
        var keyval = pairs[i].split("=");
        if (reset || sessionStorage.getItem(keyval[0]) === null) {
          sessionStorage.setItem(keyval[0], decodeURIComponent(keyval[1]));
        }
      }
    }
    var hiddenFields = document.querySelectorAll("input[type=hidden], input[type=text]");
    for (var i=0; i<hiddenFields.length; i++) {
      var param = sessionStorage.getItem(hiddenFields[i].name);
      if (param) document.getElementsByName(hiddenFields[i].name)[0].value = param;
    }
  }

  setTimeout(function(){queryForm();}, 3000);
</script>

简而言之,该代码旨在获取utm_source之类的链接参数并将其保存到sessionStorage。我不理解的是本教程未解释的以下行:

var reset = settings && settings.reset ? settings.reset : false;

此语法是什么意思?

2 个答案:

答案 0 :(得分:0)

?:

这是javascript三元运算符。您的代码等同于下面的代码

var reset;
if (setting && settings.reset) {
    reset = settings.reset;
} else {
    reset = false;
}

答案 1 :(得分:0)

它正在使用三元运算符进行空运算。基本上,它会分配重置(如果存在)或布尔值false。

更多三元运算符在这里: What does the colon ":" and the question mark "?" operators do?