【问题标题】:What is the meaning of these statements || {} in this javascript code [duplicate]这些语句的含义是什么|| {} 在此 javascript 代码中 [重复]
【发布时间】:2023-04-05 06:08:01
【问题描述】:

我刚刚开始使用 javascript 并正在阅读模块模式。

我一直在查看此页面:http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html,但无法弄清楚 || 是什么{} 语句的意思。

这段代码写的地方不少:(UTIL || {}));

谁能解释这些陈述的含义以及它们在做什么?

我假设 ||表示 OR - 但在这种情况下不太确定。

这是文章结尾的代码。第二行和倒数第二行是让我困惑的代码示例。

var UTIL = (function (parent, $) {
var my = parent.ajax = parent.ajax || {};

my.get = function (url, params, callback) {
    // ok, so I'm cheating a bit :)
    return $.getJSON(url, params, callback);
};

// etc...

return parent;
}(UTIL || {}, jQuery));

【问题讨论】:

  • @Juhana,谢谢。已更新。
  • 在我的回答中,它确保不会每次都重新创建 UTIL 对象。例如,如果您将其包装在一个函数中,您可能需要加载在某些情况下使用大量 cpu 的函数,但避免在再次请求时重新加载它。
  • 感谢所有有用的答案。我现在明白了。

标签: javascript or-operator


【解决方案1】:

这用于定义一个未设置的变量。 您可以这样做以确保有一个值集!

例如:

function iHaveParameters(param1, param2) {
   param1 = param1 || {} //empty object
   param2 = param2 || "This should be a string"
}

当然,如上所述,它只会在第一个变量为空时调用第二个值。

在您的情况下,它实际上只是在未设置变量时设置变量,这意味着如果您包含脚本 3000 次,则该变量只会在避免 CPU 时被定义。这样,您可能需要加载一个函数,例如

【讨论】:

    【解决方案2】:

    如前所述,它是一个空的 JavaScript 对象。

    我猜不太明显的是为什么你会这样做。一个常见的原因是如果对象恰好是nullundefined,则使您的代码安全。考虑传递一个对象并想要访问它的属性的示例:

    function myFunc(obj) {
        console.log(obj.name);
    }
    

    没关系,除非objundefined,在这种情况下你的代码会崩溃。

    更安全的方法通常是:

    function myFunc(obj) {
        console.log((obj || {}).name);
    }
    

    现在如果 objundefined 则创建一个新的空对象。获取其中的.name 是安全的,并且只会返回undefined

    这显然是一个过于简化的示例,但该技术被广泛用于使代码更短且更易于阅读(与将if 语句放在任何地方相比,测试和分支更少)。

    【讨论】:

      【解决方案3】:

      意思是:如果||之前的对象为null,则使用新的空对象{}代替。

      在此处阅读有关运营商的更多信息:Is there a "null coalescing" operator in JavaScript?

      【讨论】:

        【解决方案4】:

        {} 是声明空对象的一种简短方式,与使用 [] 声明空数组的方式相同。

        var my = parent.ajax = parent.ajax || {}; 表示如果对象parent.ajax 存在,则将其设置为值。如果没有,请设置一个空对象。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-09
          • 1970-01-01
          • 2021-06-01
          • 2018-01-22
          • 1970-01-01
          • 2017-11-21
          相关资源
          最近更新 更多