这些语句| |{}在这个javascript代码中的含义是什么

这些语句| |{}在这个javascript代码中的含义是什么,javascript,or-operator,Javascript,Or Operator,我刚开始学习javascript,正在阅读模块模式 我一直在看这一页:无法理解| |{}语句的含义 有很多地方编写了这段代码:(UTIL | |{}) 有人能解释一下这些话的意思和他们在做什么吗 我认为| |意味着或——但在这种情况下我不太确定 下面是本文结论部分的代码。第二行和倒数第二行是令我困惑的代码示例 var UTIL = (function (parent, $) { var my = parent.ajax = parent.ajax || {}; my.get = functio

我刚开始学习javascript,正在阅读模块模式

我一直在看这一页:无法理解| |{}语句的含义

有很多地方编写了这段代码:(UTIL | |{})

有人能解释一下这些话的意思和他们在做什么吗

我认为| |意味着或——但在这种情况下我不太确定

下面是本文结论部分的代码。第二行和倒数第二行是令我困惑的代码示例

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));

这意味着:如果
|
之前的对象为空,请使用新的空对象
{}


在此处阅读有关运算符的更多信息:

如果未设置,则用于定义变量。 您可以这样做,以确保有一个值集

例如:

function iHaveParameters(param1, param2) {
   param1 = param1 || {} //empty object
   param2 = param2 || "This should be a string"
}
当然,如前所述,它只会在第一个变量为null时调用第二个值


在您的例子中,它实际上只是在未设置变量的情况下设置变量,这意味着如果您包含了3000次脚本,那么变量仍然只会定义一次。这种方法可能需要加载函数,例如

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


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

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

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

function myFunc(obj) {
    console.log(obj.name);
}
这很好,除非
obj
未定义的
,在这种情况下,您的代码将崩溃

更安全的方法通常是:

function myFunc(obj) {
    console.log((obj || {}).name);
}
现在,如果
obj
未定义的
,则会创建一个新的空对象。获取它的
.name
是安全的,只需返回
未定义的


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

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