当前位置: 首页 > 知识库问答 >
问题:

看不懂这个Javascript语法[重复]

缪修德
2023-03-14

我从此链接中获得了以下代码片段: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个答案

张华池
2023-03-14
?:

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

var reset;
if (setting && settings.reset) {
    reset = settings.reset;
} else {
    reset = false;
}
缑勇锐
2023-03-14

它正在使用三元运算符进行零合并。基本上,如果存在或布尔值为 false,它会分配任何重置。

更多的三元运算符在这里:冒号“:”和问号“?”运营商呢?

 类似资料:
  • 本文向大家介绍javaScript代码飘红报错看不懂?读完这篇文章再试试,包括了javaScript代码飘红报错看不懂?读完这篇文章再试试的使用技巧和注意事项,需要的朋友参考一下 一、本文将会出现以下英语词汇 assignment[əˈsaɪnmənt] 赋值;分配 assignment [əˈsaɪnmənt] 分配;任务 call [kɔːl]  调用 caught [kɔːt]  捕获;接住

  • 本文向大家介绍彻底搞懂JavaScript中的apply和call方法(必看),包括了彻底搞懂JavaScript中的apply和call方法(必看)的使用技巧和注意事项,需要的朋友参考一下 call和apply都是为了改变某个函数运行的context上下文而存在的,即为了改变函数体内部this的指向。因为JavaScript的函数存在定义上下文和运行时上下文以及上下文是可以改变的概念。 回到目录

  • 本文向大家介绍一篇文章看懂JavaScript中的回调,包括了一篇文章看懂JavaScript中的回调的使用技巧和注意事项,需要的朋友参考一下 前言 回调函数是每个前端程序员都应该知道的概念之一。回调可用于数组、计时器函数、promise、事件处理中。 本文将会解释回调函数的概念,同时帮你区分两种回调:同步和异步。 回调函数 首先写一个向人打招呼的函数。 只需要创建一个接受 name 参数的函数

  • 我目前正在运行mvn测试时收到此日志 我的pom.xml是这样的: 我的IssueTest.java如下所示: 我不知道为什么IssueTest.Java没有被正确读取,尽管我在maven surefire插件的构建配置中添加了它。 请告知。

  • 这是我拿到的一组php数据,我突然看不明白这是什么数据了?我去遍历不行,用arr[0]可以拿到objectclass的数组,但是这数组为什么是(6)?

  • 然而,Antlr似乎不喜欢我在两个不同的地方使用“函数”。据我所知,语法甚至没有歧义。 在下面的语法中,如果我删除第1行,生成的解析器解析示例输入没有问题。另外,如果我更改第2行或第3行中的令牌字符串,使它们不相等,解析器就会工作。 我得到的语法错误是: 测试生成的解析器的程序: