||在javascript中

||在javascript中,javascript,operators,Javascript,Operators,谁能告诉我这是干什么的 (function() { window.myapp = window.myapp || {}; window.myapp.lang = window.myapp.lang || {}; myapp.lang.Extend = function(subClass, superClass) { subClass.prototype = new superClass(); }; })(); 这意味着:如果window.myapp不存在,则将其创建为空对象。a=a | | b

谁能告诉我这是干什么的

(function()
{
window.myapp = window.myapp || {};
window.myapp.lang = window.myapp.lang || {};
myapp.lang.Extend = function(subClass, superClass)
{
subClass.prototype = new superClass();
};
})();
这意味着:如果window.myapp不存在,则将其创建为空对象。

a=a | | b;语法相当于

if (!a)
  a = b;

等同于此代码

if(!(window.myapp)) {
  window.myapp = {};
}
||是Javascript中的逻辑OR运算符。 在这种情况下

window.myapp=window.myapp | |{}

如果window.myapp不为null或false,则将其自身分配给window.myapp,否则将为window.myapp分配一个空对象{}。

||是一个运算符

在计算x | | y时,首先计算x,如果它为真,则无需计算y,因为操作无论如何都将为真

在javascript中,如果将下列值用作if条件,则会导致“false”-

0-0 null false未定义NaN

因此,在您的情况下,如果window.myapp为“未定义”,则计算结果将为“false”,并且or运算符必须计算下一个操作数{},以完成分配给window.myapp的操作

所以它所做的就是-

if(!(window.myapp)) {
  window.myapp = {};
}

如果它不是null或false…或其他四个false值之一,则可能重复。。。NaN,未定义,0,为什么要添加参数!window.myapp而不是!window.myapp?@KitSunde只是为了确保否定适用于整个表达式。也许我们这里不需要它。
window.myapp = window.myapp || {};
if(!(window.myapp)) {
  window.myapp = {};
}
if(!(window.myapp)) {
  window.myapp = {};
}